问题标签 [separation-of-concerns]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
473 浏览

php - 在 CakePHP 中放置某些逻辑的位置

我最近开始重写我几年前使用 CakePHP 所做的一个项目。这次我正在尝试做所有“正确”的事情,所以也许有人会给我一个关于执行以下操作的指针:

我在视图中使用 Model->find('all') 从表中显示一个简单的表。此表中有两个布尔字段,它们共同构成了我需要向用户显示的内容。所以:0x0 = 'A',1x0 = 'B',0x1 = 'C',1x1 = 'D'。我应该把这个逻辑放在哪里?我一直在考虑以下方法:

  1. 风景
  2. 视图助手
  3. 控制器
  4. 模型中的某些内容,以便 Model->find('all') 输出该值(这甚至可能吗?)

这个任务可能看起来微不足道,但我认为它可能会让我从一开始就让这个项目组织起来并且可以维护。

谢谢!

0 投票
3 回答
800 浏览

winforms - 在表示层(尤其是 .NET)中使用网格时,如何保持关注点分离?

在三层模型(表示-业务-数据访问层)中,我可以始终保持下层与上层无关。例如,我的数据访问层永远不知道它是如何呈现的或在其上运行什么业务规则。我的业务规则与它们的呈现方式无关。

但我必须向 Demeter 祈求宽恕,或者至少向 Stackoverflow 的其他成员寻求一件事的建议:如何在不引用表示层中的数据访问对象的情况下向用户呈现“表格”?一次又一次,我发现自己在 GridView 对象中引用了 ADO.NET DataTable。目前我在两层都使用第三方工具。该表来自 OpenLink 的 OpenComponents Table 对象;网格是 Infragistics UltraGrid(Windows 平台)。然而,我犯了同样的罪行。

编辑: 我最感兴趣的是如何使用 WinForm 3.5 .NET 来完成。请注意以下我的评论:我相信评论中的链接是我应该做的,但我希望我不必对域对象过于花哨。我不想被指责过度设计。这是一个很好的平衡吗?

0 投票
2 回答
219 浏览

asp.net - 直接与服务层通信的 ASP.NET 用户控件?

创建直接与服务层通信(执行 CRUD 操作、验证等)的“黑盒”用户控件是否被认为是糟糕的设计?

通过“黑匣子”,我的意思是他们独立于托管的页面检索/保留数据(使用 IoC 注入服务)。每个 UC 都可以放在一个页面上,它就可以工作。请注意,任何这些 UC 中都没有嵌入任何业务逻辑(这些都在域层中)。

这种方法是由两个因素驱动的:

  1. 我们的应用程序有许多页面,它们本质上是同一视图上的变体(布局略有不同)。
  2. 此外,我们的 UI 设计师喜欢允许打开页面的离散部分进行编辑。单击 此处以尝试说明此概念。

    无论如何,感觉就像赋予 UC 渲染和持久化自身的能力/责任将消除相当多的代码重复。

如果这种方法确实被认为是“讨厌的”,请随意建议一种更吸引人的替代方法(也许是 MVP?)在可预见的未来我会坚持使用 WebForms。

谢谢!

0 投票
1 回答
154 浏览

validation - 验证断开的 POCO

在我的 ASP.NET 应用程序中,我有用于数据、业务和 UI 层的单独项目。

我的业务层由具有声明性验证的普通对象组成,使用 DataAnnotations。

问题是,在保存它们时,我不确定如何处理验证,因为它们没有直接绑定到任何数据上下文,而是映射到单独的数据层对象。

有没有办法触发对这些类型的对象的验证?

0 投票
3 回答
252 浏览

architecture - 建筑难题

在一个人的项目中工作时最糟糕的事情是缺乏你通常从同事那里得到的意见。由于缺乏这一点,你往往会犯明显的错误。

在沿着这条路走了一段时间后,我需要社区的一些帮助。

我开始了一个小小的自制项目,它应该变成某种形式的门户。困扰我的主要是我设计的持久层。对于初学者来说,它应该与表示层完全分开,并且 OR 映射器也在某处。这是因为我有多个必须使用的数据存储。

所以基本思想是各个“存储库”在各自的数据库上运行,然后业务层聚合业务对象,然后在表示层中将其转换为视图对象。

我面临的主要问题如下:

同一概念的多个类- 有用户的 DAL 表示和用户BL 表示以及用户的视图表示。我可以使用工具处理转换,但这真的是正确的方法。我的意思是它们都很好地分开了,但是开销是相当大的。

你怎么看?我是否深入关注分离兔子洞还是这仍然正常?

0 投票
3 回答
738 浏览

model-view-controller - 如何向某人解释数据结构不应该自己绘制,解释关注点分离?

我有另一个程序员,我试图解释为什么 UI 组件不应该也是数据结构。

例如,假设您从“数据库”获得了一个包含记录集的数据结构,并且您希望在应用程序的 UI 组件中显示该记录集。

根据这位程序员(他将保持无名,他还年轻,我正在教他......),我们应该将数据结构子类化为一个类,该类将在我们的应用程序中绘制 UI 组件!!!!!!

因此根据这个逻辑,记录集应该管理 UI 的绘制。

******总台*****

我知道要求记录集自己绘制是错误的,因为如果您希望在 UI 上的多个类型的组件上呈现相同的数据结构,那么您将手头上一团糟;您需要为从记录集的基类呈现的每个 UI 组件扩展另一个类;

我很清楚 MVC 模式的“简洁性”(我真正的意思是你不会混淆你的数据(模型)与你的 UI(视图)或发生在数据(控制器或多或少......好吧,API 不应该真正处理它......控制器应该尽可能少地调用它,告诉它要渲染哪个视图))但它肯定更干净而不是使用数据结构来呈现 UI 组件!

除了上面的例子,我还有什么其他的建议可以发给他吗?我知道,当您第一次学习 OOP 时,您会经历一个“阶段”,您只想扩展所有内容。

接下来是一个阶段,当您认为设计模式是每一个问题的解决方案......这也不完全正确......谢谢杰夫

有什么方法可以让我轻轻地将这个孩子推向正确的方向吗?你还有更多的例子可以帮助向他解释我的观点吗?

0 投票
3 回答
1474 浏览

dependency-injection - Rhino Mocks、依赖注入和关注点分离

我是模拟和依赖注入的新手,需要一些指导。

我的应用程序使用典型的 N 层架构,其中 BLL 引用 DAL,UI 引用 BLL 但不引用 DAL。很直接。

可以说,例如,我有以下课程:

每个都存在于一个单独的程序集中。

我想在 MyBusinessLogic 的测试中模拟 MyDataAccess。因此,我在 MyBusinessLogic 类中添加了一个构造函数来获取依赖注入的 IMyDataAccess 参数。但是现在当我尝试在 UI 层上创建 MyBusinessLogic 的实例时,它需要对 DAL 的引用。

我想我可以在 MyBusinessLogic 上定义一个默认构造函数来设置一个默认的 IMyDataAccess 实现,但这不仅看起来像代码味道,它实际上并没有解决问题。我仍然在签名中有一个带有 IMyDataAccess 的公共构造函数。所以 UI 层仍然需要引用 DAL 才能编译。

我正在尝试的一种可能的解决方案是使用 IMyDataAccess 参数为 MyBusinessLogic 创建一个内部构造函数。然后我可以使用测试项目中的访问器来调用构造函数。但是还是有那种味道。

这里的常见解决方案是什么。我一定是做错了什么。我该如何改进架构?

0 投票
2 回答
623 浏览

asp.net - ASP.Net MVC - 什么替换事件以支持松散耦合?

ASP.Net MVC 的哪些功能可以替代 Web 表单中使用事件的方式来支持松散耦合的组件?

例如,在 Webforms 中使用一个简单的分页器控件:

  1. 点击页码
  2. Pager 使用新的页码触发“PageChange”事件
  3. 此订阅页面/控件接收到事件并处理启动调用以获取和绑定新数据。

ASP.Net MVC 中有哪些工具可以类似地支持

  • 松耦合
  • 组件可重用性
  • 单个页面/视图的逻辑分离(这样一个非常复杂的“门户”类型页面)。
0 投票
5 回答
5258 浏览

asp.net-mvc - ASP.NET MVC - 分离大型应用程序

我一直对我认为自相矛盾的术语感到困惑:ASP.NET MVC 声称正在推进和支持“关注点分离”的座右铭,我觉得这是个好主意。

然而,似乎没有办法将控制器、模型或视图分离到它们自己的程序集中,或者将区域分离为程序集。

使用 ASP.NET MVC 中的 fixedController和文件夹ModelView您实际上是在创建一个大杂烩。这真的是关注点分离吗?似乎与我完全相反。

所以我想知道的是:

  • 如何创建一个 ASP.NET MVC 解决方案,将控制器、模型和充满视图的文件夹分离到单独的程序集中?

  • 如何将 ASP.NET MVC 2 的区域放入单独的程序集中?

  • 或者你如何管理一个大型的 ASP.NET MVC 应用程序——它有几十个甚至上百个控制器、大量模型和视图模型类以及几百个视图?

0 投票
2 回答
1672 浏览

delphi - 当 UI 组件具有内置功能时,如何将应用程序逻辑与 UI 分开?

我知道将用户界面代码与域代码分开很重要——应用程序更易于理解、维护、更改和(有时)隔离错误。但这是我的心理障碍...

Delphi 附带的组件具有执行我想要的方法的方法,例如,RichText 备忘组件让我可以处理富文本。其他组件,例如 TMS 的字符串网格,不仅可以满足我的需求,而且我还为该功能支付了额外费用。这些特性将 R 置于 RAD 中。

编写自己的类来完成别人已经为我完成的事情似乎不合逻辑。它正在重新发明轮子[曾经尝试过直接使用富文本吗?:-) ] 但是,如果我使用内置在这些组件中的功能,那么我最终会得到大量混合的 UI 和域代码——我将有一个表单,其中大部分代码都内置到它的事件处理程序中。

你如何处理这个问题?...或者,如果我想继续使用其他人已经为我编写的代码,你会建议我如何处理这个问题?