我在网上看到了n层解决方案,它们都为每一层使用DLL。我们的架构看起来是一样的:3个DLL:数据层,业务逻辑层和业务对象层。 但是,表示层不直接与这些层通信,而是通过WCF Web服务访问它们。
我们的ASP.NET MVC托管在与WCF WebService相同的机器上。
这是一个很好的架构吗?如果ASP.NET MVC可以直接访问其他层,那会更合乎逻辑吗?
感谢您的最终答案。
答案 0 :(得分:3)
您的架构应由您的受众决定。如果您拥有非常多的受众(按每个时段的请求进行衡量),那么您可能需要一种分布式架构,其利用Web服务的方式与您所描述的类似。但是,如果您的受众群体很小,那么您所描述的方法非常难以理解。
但是,如果您需要更新基础DLL但不希望每次都重新部署网站,那么有一个参数可以保留您当前的体系结构。在您当前的设置中,您每次都只是重新部署Web服务,而网站将不受影响。但是,除非您拥有一个非常活跃的网站,否则在您的DLL更改时重新部署网站可能无关紧要。
答案 1 :(得分:2)
层的分割线的正确数量将在很大程度上取决于网站跟随数据模型的紧密程度以及最终将在数据库上完成的繁重工作量。所以很难回答。
很多人花了很多时间担心他们是否有足够/太多的层次,不幸的是很多其他人花了很多时间试图解决其他人对他们的批评。
要真正回答这个问题,你需要考虑一些事情
我并不是要暗示这些事情永远不会发生,他们肯定会这样做,但对于许多业务领域的很多开发人员而言,他们的发生并不像理论会让你相信的那么多。
很多这样的东西只是归结为如果没有重写应用程序的其他部分而无法实际看到替换的内容。剩下的就是试图猜测你从精心设计到过早优化的过程。
恕我直言 - 对于单独的序列化和编码处罚,如果他们总是要在同一台服务器上运行,我绝不会在网络应用上编写UI。如果您最初在理论上需要在其他地方扩展服务,我可以理解其动机,但是还有一些其他问题,如缓存数据到期和事务,如果所有事情<,那么这通常会导致这仍然是一个尴尬的选择/ em>真的必须运行WCF服务。它将您需要更改的内容增加三倍以添加字段,并使您从使用关系数据库的许多功能中脱离出来。
修改强>
OP发表评论说WCF服务落后于几个前端,因此服务并不总是与UI有效地在同一主机上。如果要向mvc应用程序添加数据选项以返回JsonResults或其他内容,您仍然可以选择使用MVC返回休息端点并保持主Web UI完全附加到支持