我最近看到很多开发人员的职位发布,其中包括一个或多或少类似的句子:"必须具有N层体系结构的经验",或"必须能够开发N层应用程序".
这让我想问一下,什么是N-Tier架构?如何获得它的经验?
我想知道MVC(这是一种架构模式)与应用程序的n层架构之间究竟有什么区别.我搜索了它但找不到简单的解释.可能我对MVC概念有点天真,所以如果有人能解释其中的差异,那就太棒了.
干杯
作为一名软件工程师,我非常倾向于在应用程序层编写业务逻辑,而通常只依赖于数据库而不仅仅是CRUD(创建检索更新和删除)操作.另一方面,我遇到了在存储过程中编写大量业务逻辑的应用程序(通常是较旧的应用程序),因此有些人更喜欢在数据库层中编写业务逻辑.
对于在存储过程中拥有和/或享受书面/写作业务逻辑的人来说,使用此方法的原因是什么?
我正在使用Jeffrey Palermo描述的Onion架构设计ASP.NET MVC应用程序.
这是一个ASP.NET MVC 2.0项目中,我要求所有的视图中使用专用的视图模型是强类型的 - 我们不会通过域模型对我们的看法.我们使用AutoMapper进行翻译 - AutoMapper在基础架构中被隔离,Web不知道或不关心AutoMapper的使用.
目前,我正在Web项目中定义IViewModelMapping接口 - 只是因为控制器将使用此服务,并且它可以直接访问自己的View模型.这样,界面可以访问域模型(在Core中)和View模型(在Web中).
为了提供IViewModelMapping接口的实际实现,我在Infrastructure项目中创建了一个ObjectMapping命名空间,它将实际的映射实现与洋葱的Intrastructure隔离开来.在这样做时,这将要求Infrastructure依赖于BOTH Core AND Web.
我的问题是:由于这两个项目在技术上都位于洋葱的郊区(在同一层中) - 是否允许一个项目依赖于该层中的另一个项目?有没有人注意到这个设计有任何潜在的陷阱?
另一种设计是将IViewMapper接口移动到Core中 - 但这是不可能的,因为Core无法访问ViewModel类.我也可以将视图模型移动到Core中,但我觉得它们不属于那里,因为它们特定于UI层.
建议的体系结构如下 - 请注意,基础结构依赖于Core和Web.Web保持隔离状态,只能访问Core业务逻辑.
architecture asp.net-mvc n-tier-architecture onion-architecture
我无法理解哪些元素被称为第一层,第二层和第三层以及它们所在的位置.它们可以驻留在同一台机器或不同的机器上.哪一层驻留在哪台机器上?我们如何将特定应用程序标识为2层应用程序或3层应用程序.请举例说明
我正在考虑在我的新项目中使用MVC模式,我可以清楚地看到能够将数据层(模型)更接近表示层(视图)的主要优势,这将允许稍微增加在申请速度.但除了性能观点之外,MVC还是在视图 - 逻辑 - 数据分层类型模式上还有其他优势吗?
编辑: 对于那些感兴趣的人我刚刚上传了我创建的示例PHP代码来测试MVC的使用.我故意省略所有安全检查以使代码更容易阅读.请不要过多批评它,因为我知道它可以更加精致和先进,但不过 - 它有效!我将欢迎提出问题和建议:链接如下:http://www.sourcecodester.com/sites/default/files/download/techexpert/test_mvc.zip
model-view-controller design-patterns 3-tier n-tier-architecture n-layer
在分层应用程序中处理异常的建议方法或最佳实践是什么?
try/catch积木? 考虑一个简单的例子.假设您有一个调用业务层的UI,它调用数据层:
//UI
protected void ButtonClick_GetObject(object sender, EventArgs e)
{
try {
MyObj obj = Business.GetObj();
}
catch (Exception ex) {
Logger.Log(ex); //should the logging happen here, or at source?
MessageBox.Show("An error occurred");
}
}
//Business
public MyObj GetObj()
{
//is this try/catch block redundant?
try {
MyObj obj = DAL.GetObj();
}
catch (Exception ex) {
throw new Exception("A DAL Exception occurred", ex);
}
}
//DAL
public MyObj GetObj()
{
//Or is this try/catch block …Run Code Online (Sandbox Code Playgroud) 我正在使用Spring框架.我的服务类应该创建为单身吗?有人可以解释为什么或为什么不解释?谢谢!
我有一个存储库层负责我的数据访问,由服务层调用.服务层返回序列化并通过线路发送的DTO.通常,服务只是访问存储库并返回存储库返回的内容.
但要使其工作,存储库必须返回该DTO的实例.否则,您首先必须将存储库返回的数据层对象映射到服务层中的DTO并返回该对象.这看起来很浪费.
最重要的是,如果DTO的创建发生在服务层中,那么在一个存储库调用之前可能已经完成的事情以及因此一个数据库查询现在必须在服务层中的多个存储库调用发生以"组合"最终的DTO.当然,除非我在数据和服务层之间创建一个可以包含这样一个组合对象的传输对象.这则必须映射到DTO.为了纯洁,这似乎是浪费.但是,让存储库层返回仅通过线路发送的对象也是错误的.
在MVC和3层或N层架构中开发网站有什么区别?
哪一个更好?什么是利弊?
architecture ×4
3-tier ×2
c# ×2
asp.net-mvc ×1
database ×1
dto ×1
methodology ×1
multi-tier ×1
n-layer ×1
php ×1
spring ×1