软件架构、分层问题

LeaderTech_NJ 2016-07-12 01:30:09
根据微软petshop,我们通常把软件分为Common,Entity,DataAccessLayer、BusinessLogicLayer、和WebService/UI层。
比如,在Entity中,存在有Customer、Order类型,
现在, DAL层依赖于Entity,BLL依赖于DAL;
需求:Customer类型需要有方法MakerOrder(),MakerOrder()需要使用DAL层向数据库插入Order记录。于是Entity对DAL层形成了依赖。
问题:DAL和Entity形成了循环依赖,这是不允许的。
请问如何解决?有什么思路?
...全文
418 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
DAL 应该是一层与业务逻辑毫无瓜葛的框架。这是三层架构的一个非常重要的原则。换句话说,逻辑上是先有DAL层,然后在需要时你才设计BLL层(为表现层提供服务)。 也就说,当业务逻辑需求千变万化时,DAL层也相对稳定而不需要改变。 现在,你的DAL层干了业务逻辑层的事情,令人痛苦地跟BLL纠结在一起,每当稍微修改一下BLL、Model的时候你都要在各层去大改一遍。这叫什么“三层”?这纯粹是把简单地问题搞复杂了。
  • 打赏
  • 举报
回复
业务操作应该写到 BLL中,BLL应该是最为丰富、最大的层。 现在,你的 BLL 可能就是“薄薄的一层”,它只是调用所谓的 DAL。而你的DAL 也不干正经事儿,甚至又把业务逻辑委派给下一层你所谓的 Entity 去做了。 PetShop 其实是“三层模型”中比较垃圾的一个例子。它不过就是因为10几年前asp.net 找个第三方小项目组模仿java 中早就有的一个简单的开源商城软件做了一套商店demo而出名。PetShop 中又臭又深的分层,其实并不必要。 你可以直接使用 EF,甚至 ADO.NET 作为 DAL层。Model是各层都需要引用的公共部分,其实也不叫座层。你应该把重点放到“表现层跟BLL层分离,表现层从不调用DAL”就可以了,这就是三层架构。不要搞繁琐了。
  • 打赏
  • 举报
回复
Entity 是神马呢? 如果你“现在, DAL层依赖于Entity”,由于 DAL 应该是一个与业务无关的框架,那么就算是你模仿 PetShop 写了一个非常冗余、非常繁琐的“为了三层而三层”的一大堆东西,你也还是要慢慢理解DAL应该与业务撇清关系的这个基本原则。 如此,你的Entity应该是“失血模型”,没有任何与数据库、与业务层交互的代码,只有干巴巴的字段、属性,或者顶多有“数据格式化”之类的简单的代码。这才叫“失血的”模型。
software_artisan 2016-07-12
  • 打赏
  • 举报
回复
楼主你把Model和Entity搞混了!Entity一般都是ORM自动生成的数据表对应的实体,Customer里面不应该有MakerOrder()这样的方法。 建议的做法是新建一个叫Customer的Model,在Model里面写MakerOrder()方法。
q107770540 2016-07-12
  • 打赏
  • 举报
回复
需要一个model层 MakerOrder() 使用model向db插入order记录
wanghui0380 2016-07-12
  • 打赏
  • 举报
回复
基本上petshop是技术风险控制,不是业务风险控制的样板 而技术风险这块,在多数公司里其实根本不存在。因为成熟的公司用着成熟的技术,不成熟的技术则小规模试用,而且正常来说别说微软这个20年跨度滴考量,正常来说一个软件产品,本身就会不停迭代升级,一开始就来个20年计划那根本就不现实 而不成熟的公司也用不着什么20年计划,他能活7年就已经很了不起了
wanghui0380 2016-07-12
  • 打赏
  • 举报
回复
真正来说,如果你核心关注点就在BIL,那么你的两端用什么都一样。这才是风控的目标。 当然就BIL在petshop滴展示的是最不充分的,因为他20年之间没有变化任何功能,他根本就不需要防范,也无从防范,所以他滴bil成了传声筒,而所有被petshop带上这条路的人滴那一层,也都成了传声筒 回到你的问题,我们说在有EF滴情况下,其实就没必要做dal,因为dal是什么??数据访问,数据持久,那么问题来了,EF不是数据访问?不是数据持久??? 当然如果你和微软一样,关注的是,如果我把mssql切换成orcle,ado.net切换成ORM,这东西才有实际意义,因为这才是微软当时那么玩滴目的,就是为了展示一下我怎么从ado--换成了--ado.net,ado.net怎么搞成了ORM
wanghui0380 2016-07-12
  • 打赏
  • 举报
回复
根据微软petshop,就这第一句你的系统就跑偏了 why?? 原因很简单,因为petshop的核心目标不是风险防范,他的那个东西20年间没有变化任何功能,所有的功能跟20年前vb时代就存在的petshop项目一样一样 他的核心目标是展示微软这20年来在各种异构方案的跳去跳来 vb form+数据模块--》net UI+mssql/access-->网站+msqsql/EF 也切换的是两端,问题是如果你的项目核心风险在那里?是把mssql换成orcle么?是把winfrom换成wpf么??都不是,真正实际项目核心风控根本不在这里
xuzuning 2016-07-12
  • 打赏
  • 举报
回复
已经不是原始意义上的三层 可以说是退化到 MVC 之类的架构
xuzuning 2016-07-12
  • 打赏
  • 举报
回复

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧