惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
D
Docker
GbyAI
GbyAI
宝玉的分享
宝玉的分享
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Vercel News
Vercel News
博客园_首页
Recent Announcements
Recent Announcements
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
S
SegmentFault 最新的问题
Microsoft Security Blog
Microsoft Security Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
V
V2EX
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
IT之家
IT之家
Apple Machine Learning Research
Apple Machine Learning Research
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

博客园 - 帝之晓

Metabase里的 linked filters 使用 EntityFramework 6.0 修改一个已经存在的对象 这个功能是怎么实现的 英语英语。我想要把你学的很牛逼。 PS快捷键大全 附加数据库错误 5102 如何在三个月内获得三年的工作经验(转) sql2005还原数据库 Nettiers的GridViewSearchPanel - 帝之晓 - 博客园 企业库的日志使用 常用的40个网站制作技巧(收藏整理)转 - 帝之晓 - 博客园 asp.net里的基础概念 符合.net准则的事件 BlogEngine数据库结构 XmlSerializer 序列化和反序列化 决定好好研究一些开源的系统 TimeTracker研究 共享软件的十大破解工具 免费的css模板下载
.nettiers里的ServiceLayer和DomainModel
帝之晓 · 2009-02-28 · via 博客园 - 帝之晓

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