【发布时间】:2016-03-02 17:06:17
【问题描述】:
我们正处于 .Net 中的中型/大型应用程序的早期设计阶段,该系统具有三个不同的内部客户端(站点)(一个在单独的域中)连接,以及一个大量的外部服务。
我们现在专注于连接的内部站点,我提出了一个经典的分层应用程序,包括接口层、服务层、业务逻辑层和数据访问层。
在图像中,我们有一个连接到 MVC 应用程序的浏览器。控制器有一个对服务项目的引用(可能有每个“业务领域”的类。例如,“PersonService”)。 MVC 将直接引用此服务项目。在Service层,还会有一些WCF项目,将某些功能暴露给外部源、其他内部站点和服务等。
不过,WCF 项目将连接到主服务 DLL 以从中获取共享功能。
然后,Service 项目直接引用 Business 项目,包含所有业务逻辑。然后它引用了数据访问项目,该项目有一个/一些实体框架模型作为 SQL Server 数据库的 ORM。
SharedLib 只是一个所有层都引用的项目,包含任何共享逻辑,但主要用于 DTO(数据传输对象)。 EF 模型在数据层被转换为 DTO,因为没有其他层引用 EF 模型。
但是 MVC 应用程序,通过应用程序内的直接引用连接到服务层,以及将 WCF 服务暴露给外部源和跨域内部站点。
我们遇到的问题是在服务层上。我认为这应该是一个DLL,其他人说,如果没有WCF,那么表示应该直接连接到业务逻辑层。他们问,“为什么要在此处添加服务 DLL 的额外层和复杂性?”。
消除表示“可以”直接连接到逻辑的服务层是一种好习惯吗?我看到了服务层的好处,它增加了业务和表示的明确分离,并允许可扩展性。它看起来确实像一个通过 dll,但直接连接到 BL 似乎 - 奇怪。
是否有使用 DLL 的优点/缺点来证明保留/不保留它是合理的?
【问题讨论】:
-
您好,当您说“我们遇到的问题是在服务层上。我认为这应该是一个 DLL”时,能否请您详细说明一下。您打算如何构建解决方案?在您的图中,共享库框是什么,您是指“共享项目”还是由不同 UI 实现共享的二进制文件?
-
谢谢@LostBalloon。编辑了问题。
-
如果我的回答太长,请随意跳过一些段落或一直到最后几段。希望我能帮上忙。
-
谢谢@LostBalloon。无需跳过。喜欢阅读。谢谢。
标签: c# .net wcf dll architecture