c# – 如何初始化一个类?
发布时间:2020-12-15 04:29:25 所属栏目:百科 来源:网络整理
导读:问题很简单,我有一个类“Stock”,我想从db加载它的属性“StockName”,“StockCode”. 我应该使用哪种模式? 模式1)使用服务类来创建它 public interface IStockService{ Stock GetStock(string stockCode); void SaveStock(Stock stock); } public class Sto
问题很简单,我有一个类“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)是工厂(方法)模式,让我想起单身人士(静态=单身).注意
singletons are evil.工厂方法不是多态的.您不能为测试更改它(即您无法模拟它).这是邪恶的!躲开它!
模式3)违反了构造函数不应该做太多的事情.在我看来,查询数据库对于ctor来说太过分了.对象及其创建是不同的关注点,应该分开.应该将实例的更多创建与实例分开,因此尝试使用工厂(或注入器).您可以通过代码更换工厂,而不是“新类”. 模式1)仍然存在,这是一种抽象的工厂模式.这很好.您可以使用另一个实现进行测试(模拟).它将创建与对象分开. (Carl Bergquist称之为单一责任原则.) 所以我会选择模式1. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |