.nettiers里的ServiceLayer和DomainModel

用.nettiers生成代码的时候有一个选项 IncludeComponentLayer,有None,ServicesLayer和DomainModel三个选项,看示例好像都是比较喜欢用ServicesLayer,不过我比较喜欢选DomainModel,这两个选项按我粗浅的理解就是一个用的是失血模型,一个是充血模型,ServicesLayer里面生成了很多的具体操作,但是不包括数据,示例是这样子的:

AccountService accountsService = new AccountsService(); //GetAll() TList<Accounts> accountList = accountsService.GetAll();

这里Accounts是 Entities里面的东西,而按DominModel的做个类似的操作是这样的:

TList<Accounts> accountList=Accounts.GetAll();

Services 里的 Accounts继承于Entities的Accounts,而且加上了各种的具体方法,

从代码上来看毫无疑问是下面的这个方法用起来更自然,用上面的方法,每次要取得一个实体,还要去调用一下该实体的Service类的方法,等于多了一步操作。

其实之前看了下BlogEngine里面的代码,好像也是用这种充血的模型,就是把数据和操作放在一个类里面,而PetShop则是用的失血模型,表里面的每个列都有一个加上info代表数据的类,看了下两种模型的区别是这样子的,失血模型分层比较清晰,数据的归数据,操作的归操作,缺点是BLL层的职责过重,所有的操作都在BLL层了,而充血模型则比较符合面向对象,缺点是职责划分不明确,比如有一个order类,到底应该什么操作放在order类里面,什么操作放在其他地方分的不清楚,如果一个人写代码还好,在团队合作的时候每个人写的不一样就会导致很多的混乱。

话说好像我现在看到很多别人写的代码,都是用的petshop这种失血的模型,我个人是更喜欢充血模型,大概是现在只体会了它的好处而没有体会过它的坏处吧。

原文地址:https://www.cnblogs.com/asdio/p/1400354.html