C# 关于N层应用程序的新手建议
好了,各位,这是另一个给你们的: 我从n层应用程序世界开始。我已经读了一些关于这个主题的书,一般的建议是n层应用程序的目标是抽象层之间的功能。因此,基于此,在n层应用程序中,常规模型是:C# 关于N层应用程序的新手建议,c#,nhibernate,n-tier-architecture,C#,Nhibernate,N Tier Architecture,好了,各位,这是另一个给你们的: 我从n层应用程序世界开始。我已经读了一些关于这个主题的书,一般的建议是n层应用程序的目标是抽象层之间的功能。因此,基于此,在n层应用程序中,常规模型是: 数据访问->业务层->演示 由于我是一名.NET开发人员,我认为为了增强与多种客户机类型(Silverlight、Web app甚至WinForms客户机)的集成,我应该在业务层使用WCF(Windows Communication Foundation)作为数据服务,以便客户机可以与之通信,而不管其类型如何。
数据访问->业务层->演示
由于我是一名.NET开发人员,我认为为了增强与多种客户机类型(Silverlight、Web app甚至WinForms客户机)的集成,我应该在业务层使用WCF(Windows Communication Foundation)作为数据服务,以便客户机可以与之通信,而不管其类型如何。另外,我是NHibernate的超级粉丝,也是一个ORM。所以我的结构是这样的:
数据访问(NHibernate)->业务层(WCF)->演示(WPF、ASP.NET、WinForms)
好的,这就是设置。我对这种方法完全是新手,所以我想我可以在这里发帖,征求关于这种设置的建议。另外,我对如何在VS解决方案中设置这一点非常困惑,我喜欢在不同的项目中分离层,但是数据对象的抽象(如客户、订单等)呢?我是否将它们放在一个单独的库中?那么WCF呢?我知道程序员通过网络将数据类传输到客户端是一种罪过。专业人士是如何实现这一点的
谢谢,如果您有任何建议,我们将不胜感激。这非常符合目标。不过,N-Tier比N-Layer要复杂一点,您可以通过询问“您的层实际上是否位于不同的物理服务器上?”来对比 根据业务层的复杂程度,您可能希望在业务层和服务层之间进一步抽象业务层。通常,这两个层紧密联系在一起,并位于同一物理服务器上。服务层通常充当BLL的门面 如果表示层位于同一服务器上,则ASP.NET或WinForms应用程序可能希望与BLL通信,而无需通过WCF服务 仔细阅读 您的域对象应该位于它们自己的程序集中—通常是您的域模型中。根据,将项目程序集命名为相应的名称是一种良好做法: [公司].[产品或组件].[…] 我碰巧喜欢这种名称间距格式,通常使用: [公司][产品][层][子层].[…] 以下是使用解决方案文件夹组织每个项目的示例解决方案: 在本例中,我有一个BLL和服务层。服务层提供WCF库中的实际实现,而演示文稿实际包含承载服务的WCF Web应用程序。将实现与接口分离始终是一种好的做法 可以忽略/Client文件夹,我只是将其用作测试的示例控制台应用程序。任何使用您的服务的客户端应用程序都应该有自己的解决方案,否则您将管理一个庞大的解决方案 至于通过网络传输的数据对象……我假设您指的是来自ORM的类。(域模型)你是对的,这通常被认为是不好的做法。解决方案是使用数据传输对象。你可以从图片中看到我有一个.Dto库。如果你能使用像AutoMapper这样的工具,我完全赞成,但是,将Dto添加到你的解决方案中会带来更多的复杂性和维护。我相信Dino Esposito写了一部很好的艺术作品我会尽力帮你找到的 希望这有帮助
[编辑] 我应该注意,我不熟悉nHibernate的功能。可能有更好的解决方案可以使用该ORM。我只使用过实体框架
[编辑2]
查看Dino Esposito的-+1-一个很好的问题,将问题带到了点子上。这可能有点主观。Lucero,谢谢你的回答。我已经检查了这个问题,解决了一些疑问,但不幸的是,我不太喜欢他的方法。每个人似乎都反对将NHibernate实体对象暴露给WCF实际上,海报将WCF服务与NHibernate相关联,而不是使用中介服务类。我期待着尽可能多地提供抽象和集成。好的,你的回答非常简单,几乎解决了我的所有疑问。感谢VS解决方案方案和参考资料。我现在是strongl我想买一本应用程序架构书的硬拷贝。绝对是一个不错的选择。我自己也印了上面提到的两本书。阅读和参考资料都很棒。