c# – 如何初始化一个类?

前端之家收集整理的这篇文章主要介绍了c# – 如何初始化一个类?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
问题很简单,我有一个类“Stock”,我想从db加载它的属性“StockName”,“StockCode”.

我应该使用哪种模式?

模式1)使用服务类来创建它

public interface IStockService{
             Stock GetStock(string stockCode);
             void SaveStock(Stock stock);
         }
         public class StockService : IStockService{
         }

         IStockService stockService = new StockService();
         Stock stock = stockService.GetStock();

模式2)在库存中使用静态方法

public class Stock{
            public static Stock GetStock(){
                Stock stock = new Stock;
                //load stock from db and do mapping.
                return stock;
            }
            public void Save(){
            }
        }

模式3)使用构造函数加载

public class Stock{
            public Stock(){
                //load stock from db and do mapping.
                this.stockName = ...
                this.stockCode = ...
            }
        }

对于模式1:它似乎使用如此多的代码来创建一个股票对象,而“SaveStock”方法似乎有点不是面向对象的.
对于模式2:“保存”方法似乎没问题,但GetStock方法是一个静态方法,它似乎是一个总是使用静态方法的Utility类.
对于模式3:构造函数将在初始化时从db加载数据.它似乎也很困惑.

解决方法

模式2)是工厂(方法)模式,让我想起单身人士(静态=单身).注意 singletons are evil.工厂方法不是多态的.您不能为测试更改它(即您无法模拟它).这是邪恶的!躲开它!

模式3)违反了构造函数不应该做太多的事情.在我看来,查询数据库对于ctor来说太过分了.对象及其创建是不同的关注点,应该分开.应该将实例的更多创建与实例分开,因此尝试使用工厂(或注入器).您可以通过代码更换工厂,而不是“新类”.

模式1)仍然存在,这是一种抽象的工厂模式.这很好.您可以使用另一个实现进行测试(模拟).它将创建与对象分开. (Carl Bergquist称之为单一责任原则.)

所以我会选择模式1.

原文链接:https://www.f2er.com/csharp/91355.html

猜你在找的C#相关文章