所以我正在重新组织一个winforms C#解决方案,以帮助解耦并使其更清洁,更有条理.该解决方案可跟踪小型业务订单等..
到目前为止,我已经完成了这些项目
App.View - 所有GUI相关代码
App.Data - 只是数据结构和接口.没有其他实现代码
App.BusinessLogic - 没有GUI引用的所有业务逻辑代码
我有一些课程,我无法弄清楚他们属于哪里.请让我知道您对每个课程应该去哪个项目的想法,或者是否有另一个项目应该为此创建.
从数据库中检索用户首选项的类
一个从静态数据服务器检索静态数据并返回数据结果集的类.
一个降低用户权利的类
存储订单哈希表的模型类
通过电子邮件发送有关用户操作的消息的类
tvanfosson.. 8
实际上,我认为你有一些传统的分层架构.通常,应用程序处理的数据模型将与业务层一起保存在业务层中.您的数据层将包含持久性框架的数据模型和与该框架交互的代码.我认为这可能是您的课程建议位置与您根据自己的评论对此做出反应之间混淆的根源.
从这个角度来看,任何检索或带来的东西都必须位于您的数据层中 - 它正在访问持久存储中的数据.它检索的内容最终会转换为业务逻辑操作的业务层对象.事物是概念模型 - 如订单表 - 或业务操作属于业务层.我同意@Adron,也许同样对于(3)取决于它实际是什么的混淆.
进一步来说:
用户首选项是业务对象,检索它们的是数据层对象.
静态数据映射到业务对象(表或视图或其他东西),访问外部服务器的东西是数据层对象.
用户权利是业务对象,检索它的是数据层对象.
Orders表是一个业务对象
电子邮件是一种商业活动,因此邮寄人物是一种商业对象
[编辑]我针对(简单)网络应用程序的通用3层体系结构
DataAccessLayer
这将包括我的TableAdapter和强类型的DataTables和Factories,它们将我的DataTables行转换为LINQ前项目中的业务对象.使用LINQ,这将包括我的DataContext和设计器生成的LINQ实体.
BusinessLayer
这将包括任何业务逻辑,包括验证和安全性.在LINQ之前,这些将是我的业务对象和实现应用程序逻辑的任何其他类.使用LINQ,这些是我的LINQ实体的部分类实现,用于实现安全性和验证以及任何其他类来实现业务逻辑.
介绍
这些是我的网络表单 - 基本上是应用程序的UI.我确实在表单中包含了一些验证逻辑作为优化,尽管这些也在BL中得到验证.这还包括任何用户控件.
注意:这是逻辑结构.项目结构通常反映了这一点,但是在某些情况下,例如与Web服务的连接,可能直接包含在Web项目中,即使逻辑上组件实际上在BL/DAL中.
注意:一旦ASP.NET MVC投入生产,我可能会转向3层MVC.我在Ruby/Rails中完成了一些个人项目,我非常喜欢用于Web应用程序的MVC范例.
实际上,我认为你有一些传统的分层架构.通常,应用程序处理的数据模型将与业务层一起保存在业务层中.您的数据层将包含持久性框架的数据模型和与该框架交互的代码.我认为这可能是您的课程建议位置与您根据自己的评论对此做出反应之间混淆的根源.
从这个角度来看,任何检索或带来的东西都必须位于您的数据层中 - 它正在访问持久存储中的数据.它检索的内容最终会转换为业务逻辑操作的业务层对象.事物是概念模型 - 如订单表 - 或业务操作属于业务层.我同意@Adron,也许同样对于(3)取决于它实际是什么的混淆.
进一步来说:
用户首选项是业务对象,检索它们的是数据层对象.
静态数据映射到业务对象(表或视图或其他东西),访问外部服务器的东西是数据层对象.
用户权利是业务对象,检索它的是数据层对象.
Orders表是一个业务对象
电子邮件是一种商业活动,因此邮寄人物是一种商业对象
[编辑]我针对(简单)网络应用程序的通用3层体系结构
DataAccessLayer
这将包括我的TableAdapter和强类型的DataTables和Factories,它们将我的DataTables行转换为LINQ前项目中的业务对象.使用LINQ,这将包括我的DataContext和设计器生成的LINQ实体.
BusinessLayer
这将包括任何业务逻辑,包括验证和安全性.在LINQ之前,这些将是我的业务对象和实现应用程序逻辑的任何其他类.使用LINQ,这些是我的LINQ实体的部分类实现,用于实现安全性和验证以及任何其他类来实现业务逻辑.
介绍
这些是我的网络表单 - 基本上是应用程序的UI.我确实在表单中包含了一些验证逻辑作为优化,尽管这些也在BL中得到验证.这还包括任何用户控件.
注意:这是逻辑结构.项目结构通常反映了这一点,但是在某些情况下,例如与Web服务的连接,可能直接包含在Web项目中,即使逻辑上组件实际上在BL/DAL中.
注意:一旦ASP.NET MVC投入生产,我可能会转向3层MVC.我在Ruby/Rails中完成了一些个人项目,我非常喜欢用于Web应用程序的MVC范例.