如何在 C# 中实现 3 层架构

Posted

技术标签:

【中文标题】如何在 C# 中实现 3 层架构【英文标题】:How to implement 3 tiers architecture in c# 【发布时间】:2012-11-27 00:23:28 【问题描述】:

我阅读了很多关于 c# 中的 3 层架构的文章,但我看到了:

几乎使用业务逻辑层(BLL)作为对象映射数据库中的对应表。这个 BLL 对象有一些类似的方法:

+GetData():返回这个;

+Update(this);

+Insert(this);

+Delete(this);

这个BLL对象调用对应的DAL(Data Access Layer)执行到对应的数据库表。

我想如果通过上述方法,我们可以只获取一条记录并更新它。但是如果我们有很多记录并且想把它放到一个数据集中, 我们如何更新所有更改的记录?我们必须对所有记录使用循环吗? 另外,在数据库中,有很多表是相互关联的,那么如何将它们放入数据集中,建立关系和 添加、更新、删除记录,例如使用 BindingSourceComboboxDataGridView?在这种情况下我们如何分离代码?

【问题讨论】:

【参考方案1】:

有 2 个很酷的 C# 三层架构项目。

3-tier architecture in C# 和 T̶h̶r̶e̶e̶ ̶L̶a̶y̶e̶r̶ ̶A̶r̶c̶h̶i̶t̶e̶c̶t̶u̶r̶e̶ ̶i̶n̶ ̶C̶#̶ ̶.̶N̶E̶T̶。这两个项目都特别适合您。

【讨论】:

非常感谢。我已经阅读了 2 个示例,我可以理解一些基本的 3 层架构的工作原理。但是它们只提供了一个带有对象(用户)的简单示例。如果我们使用“DataSet”显示所有记录,我们如何更新“DataSet”上更改的所有记录,循环所有记录,不是吗?如果我们有许多相互关联的对象,这是显示数据并一起更新它们的最佳方式!你能给我更复杂的例子吗! 这两篇文章都让业务逻辑层依赖(也就是引用)dal 层。这不是要走的路。您的业​​务模型(又名域模型)应该是您的应用程序的中心,其余的都有对它的引用。一个好名字是洋葱模型。谷歌一下,值得! 洋葱架构 - jeffreypalermo.com/blog/the-onion-architecture-part-1【参考方案2】:

上面描述了一个非常简单的三层模型架构。

    DAL(数据访问层)直接与数据库交互,因此所有 SQL 操作都仅在 DAL 内完成。 BLL(业务逻辑层)就像 DAL 和 Presentation Tire 之间的中介。 DAL 和表示层之间不允许直接通信。 虽然实体层没有物理存在,但实体封装了所有信息/数据,并将其从一层传递到另一层。 因此,所有数据库对象名称和数据库架构都被限制在 DAL 内,这为应用程序提供了额外的安全层。 由于在 BLL 中定义了业务规则/逻辑,因此对业务逻辑的任何更新都不会影响 DAL 和表示层

此图描述了 3 层模型的实际实现。

    数据访问服务和数据库服务器可以托管在单个服务器中。 大多数 SQL Server 2000/2005/2008 或 Oracle 可以托管在 Windows 2000/2003 Server 上。 Business Server 通过 Web Service /Remoting/WCF 公开所有操作。 可以使用具有 Windows 2000/2003 的高度配置的服务器来托管业务服务,或者也可以使用 Microsoft BizTalk Server。 Presentation Tier 或客户端使用代理通过 http:// 管道使用在业务服务器上公开的服务。 客户端可以是任何独立的机器,如果是桌面应用程序(Win-Form 或控制台应用程序),则客户端可以是正在安装应用程序的任何独立计算机,或者具有运行 Web 应用程序的浏览器。 数据/信息被实体封装,并通过网络从一个位置传输到另一个位置,然后是所有网络协议。

【讨论】:

非常感谢!我对 3 层和 3 层架构有了更多的了解。例如,我们有一个存储用户信息的表,因此每个用户映射一个实体。如果我们想将所有用户显示到一个datagridview中并更新所有更改信息的用户,我们是否必须封装每个实体对应的每一行(使用循环)来更新?这是最好的方法。谢谢。对不起,因为我的英语不好 多年来我看到的最大的“错误层”问题是 UI 层中的业务逻辑。一个好的经验法则是“如果我有 2 个表示层,我是否必须复制我正在编写的代码?”如果是,将其移至业务层。

以上是关于如何在 C# 中实现 3 层架构的主要内容,如果未能解决你的问题,请参考以下文章

在C#程序中实现插件架构

如何在C#中实现OPC数据访问

在 3 层架构中实现业务逻辑

如何使用 LINQ 在 C# 中实现梯度下降算法?

如何在 C# 中实现 sdbm 哈希函数?

如何在 C# 中实现 ORM