zoukankan      html  css  js  c++  java
  • .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这种失血的模型,我个人是更喜欢充血模型,大概是现在只体会了它的好处而没有体会过它的坏处吧。

  • 相关阅读:
    iostream迭代器操作"txt文本文件"无法写入的思考
    Qt 相对路径 绝对路径
    "lambda"和“bind”的初步思考
    "partition"和“stable_partition”的思考
    "accumulate"的思考
    顺序容器“inset”的思考
    C++重载函数 const形参 引用指针 const_cast
    C++ 可变参数的函数
    JDK8流式处理常用例子
    JDK8时间新API
  • 原文地址:https://www.cnblogs.com/asdio/p/1400354.html
Copyright © 2011-2022 走看看