【发布时间】:2026-02-17 18:05:01
【问题描述】:
我对 OOP 中的建筑设计相当陌生(我来自编程机器人,所以有点困难)。我所参与的团队正在创建一个相当大的应用程序,首席项目经理向我们提出了要求,在这些要求中,我们必须在创建模块时使用层。我们使用的技术是用于数据存储的 C# WinForms 和 Oracle。
我的模块由用户管理组成,我试图将逻辑与实现分开,所以我有以下架构:
- 业务层
- 数据层
- 表示层
我将存储库模式和 IoC 与 EF 一起使用,一切看起来和工作正常,但现在我的老板告诉我,我需要将表示层与数据层完全分开。问题在于,我从表示层使用 IoC,如果我想创建一个用户对象,例如,我执行以下操作:
_userRepo.InsertNewUser(new User { props here } ); .
所以这是不正确的,因为我直接访问 DAL。我的老板告诉我,我需要另一层来隔离此类调用并实施业务规则(?!)
我已经搜索和研究了互联网,但没有发现任何帮助(主要是因为这里的所有内容都在工作中被过滤了)。
我认为我的老板想要一些领域层/服务层,但我不知道如何在当前设计中实现它。我可以毫无问题地发布项目,任何敏感数据都将从代码中删除。
任何帮助将不胜感激。
【问题讨论】:
-
您尝试这样做的原因是您有两个或更多不同的 PL,或者您的后端 API 被其他应用程序使用。例如,您的 Web、桌面和移动应用程序将使用相同的后端 API。是这样吗?如果不是,你的老板把事情复杂化了,记住 YAGNI。
-
@oleksii 尽管我同意 YAGNI,但解决问题也很重要。例如,如果你想从 EF 更改为其他一些 ORM 框架,你将不得不触摸 BL,这是你不应该...
-
@derape 如果我想从 EF 更改为其他内容,我会在选择 ORM 之前执行此操作。在抽象 ORM 之上构建抽象是一种浪费和过度复杂化。这种抽象还删除了有关 ORM 的特定细节,我认为这些细节相当有用。
-
@oleksii 我认为这个话题没有“黄金法则”,这真的取决于你的应用程序设计和要求等。所以我不能给出详细的“好” " 在这里回答...
-
我会看看其他同事是怎么做的……