Tag: design patterns

如何实现通用的RepositoryFactory?

我正在尝试实现一个通用存储库。 这是我到目前为止所得到的…… public interface IRepositoryFactory { IRepository RepositoryOf() where T : class; } public class EntityFrameworkRepositoryFactory : IRepositoryFactory { private readonly IWindsorContainer _container; public EntityFrameworkRepositoryFactory(IWindsorContainer container) { _container = container; } public IRepository RepositoryOf() where T : class { var repository = _container.Resolve<IRepository>(); return repository; } } RepositoryFactory由我的工作单元实现使用 public interface IUnitOfWork : IDisposable { IRepository […]

用于状态处理的多态Enum

如何在不使用C#中的switch或if语句的情况下处理枚举? 例如 enum Pricemethod { Max, Min, Average } ……我有一篇文章 public class Article { private List _pricehistorie; public List Pricehistorie { get { return _pricehistorie; } set { _pricehistorie = value; } } public Pricemethod Pricemethod { get; set; } public double Price { get { switch (Pricemethod) { case Pricemethod.Average: return Average(); case Pricemethod.Max: […]

如何在类型安全的枚举模式上使用switch语句

我以不同的方式找到了一个关于实现枚举的好例子。 我认为这就是所谓的类型安全枚举模式 。 我开始使用它,但我意识到我不能在switch语句中使用它。 我的实现如下所示: public sealed class MyState { private readonly string m_Name; private readonly int m_Value; public static readonly MyState PASSED= new MyState(1, “OK”); public static readonly MyState FAILED= new MyState(2, “ERROR”); private MyState(int value, string name) { m_Name = name; m_Value = value; } public override string ToString() { return m_Name; } […]

Web应用程序中的单例模式

我在我的Web应用程序中使用单例模式作为datacontext,因此我不必每次都实例化它,但是我不确定Web应用程序是如何工作的,IIS是否为每个连接的用户打开一个线程? 如果是这样,如果我的单例不是线程安全会发生什么? 另外,对于datacontext使用单例模式是否可以? 谢谢。

有没有人想过以这种方式使用Blackboard Pattern?

有没有人对“实用程序员”第165页对Blackboard概念有任何想法? 我想要几个小的子系统(DLL和EXE)大多是相互独立的。 有些程序集将由所有EXE使用。 这些程序集几乎都使用相同的数据库。 而不是使用接口进行这些程序集之间的通信,Blackboard类型模式不会提供更多的独立性吗? 我正在考虑一些通过事件通知并且所有子系统通信都通过它的中介类型构造。 这使syb系统非常独立。 调解员将保留其应广播的所有通知的名称。 然后,订阅者将按名称侦听特定事件,但始终订阅相同(或可能传递名称作为参数)中介事件。 以下是对它的更多讨论: http : //www.experts-exchange.com/Programming/Languages/C_Sharp/Q_22829492.html

除了enum之外还有什么用于c#

所以目前有一个枚举用于应用程序的状态。 然而,当使用它来对抗ui时会感觉不到。 填充下拉列表时,对于整数和字符串之间的许多转换。 我可以使用扩展方法或类型转换器并继续使用枚举,如果枚举中有多个单词,这将是有用的。 我以为在挖到它之前我会要求看到填充可能的洞。 谢谢。

C#:Enum反模式

有人一直在谈论Enums一般违反清洁代码原则,所以我正在寻找人们最喜欢的Enum反模式和替代解决方案。 例如,我见过这样的代码: switch(enumValue) { case myEnum.Value1: // … break; case myEnum.Value2: // … break; } 它比带有魔术字符串的switch语句更好一步,但这可能已经通过工厂,容器或其他模式更好地解决了。 甚至像这样的老派代码: if(enumValue == myEnum.Value1) { // … } else if (enumValue == myEnum.Value2) { // … } 您对枚举有哪些其他反模式和更好的实现 ?

工厂模式但具有对象参数

采用以下经典工厂模式: public interface IPizza { decimal Price { get; } } public class HamAndMushroomPizza : IPizza { decimal IPizza.Price { get { return 8.5m; } } } public abstract class PizzaFactory { public abstract IPizza CreatePizza(ItalianPizzaFactory.PizzaType pizzaType); } public class ItalianPizzaFactory : PizzaFactory { public enum PizzaType { HamMushroom, Deluxe, Hawaiian } public override IPizza […]

switch语句是否适用于工厂方法? C#

我想返回一个接口,并在switch语句中我想设置它。 这是一个糟糕的设计吗? private IResultEntity GetEntity(char? someType) { IResultEntity entity = null; switch (someType) { case ‘L’: //life entity = new LifeEntity(); break; case ‘P’: //property entity = new PropertyEntity(); break; case ‘D’: //disability entity = new DisabilityEntity(); break; case ‘C’: //credit card entity = new CreditCardEntity(); break; } return entity; }

我的DDD工厂类应该采用哪些方法?

我正在努力了解我的工厂类应该在我的DDD项目中做什么。 是的,工厂应该用于创建对象,但究竟应该做什么。 考虑以下工厂类: public class ProductFactory { private static IProductRepository _repository; public static Product CreateProduct() { return new Product(); } public static Product CreateProduct() { //What else would go here? } public static Product GetProductById(int productId) { //Should i be making a direct call to the respoitory from here? Greener.Domain.Product.Product p = _repository.GetProductById(productId); return p; […]