问题标签 [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 投票
3 回答
3138 浏览

asp.net - 如何从 Web 应用程序层下的层访问 Session 值

我们的应用程序中有许多实例,我们希望能够访问我们业务域和数据访问层中当前登录的用户 ID 等内容。在日志中,我们将此信息推送到会话,因此我们所有的前端代码当然都可以轻松访问它。但是,我们在获取应用程序较低层的数据时遇到了巨大的问题。我们似乎无法找到一种方法来将值存储在仅为用户具有全局范围的业务域中(静态类和属性当然由应用程序域共享,这意味着会话中的所有用户只共享一个对象的副本)。我们考虑过将会话传递给我们的业务类,但是我们的域与我们的 Web 应用程序非常紧密地耦合。

我很难相信我们是第一批遇到这种问题的人。你是如何在你的应用程序中处理这个问题的?

0 投票
5 回答
876 浏览

unit-testing - 使用许多私有方法对复杂类进行单元测试

我有一个带有一个公共方法和许多私有方法的类,这些方法的运行取决于传递给公共方法的参数,所以我的代码看起来像:

我想了几种方法来测试这个类,但它们似乎都过于复杂,或者暴露的方法比我想要的要多。到目前为止的选项是:

  • 将所有私有方法设置为 internal 并使用 [assembly: InternalsVisibleTo()]

  • 将所有私有方法分离到一个单独的类中并创建一个接口。

  • 将所有方法设为虚拟,并在我的测试中创建一个继承自此类的新类并覆盖这些方法。

是否有任何其他选项可以测试上述课程,这会比我列出的更好?

如果您选择我列出的其中之一,您能解释一下原因吗?

谢谢

0 投票
1 回答
72 浏览

.net - 如何在考虑 SoC 的情况下设计基于向导的系统?

我正在构建一个提供应用程序自动化服务的 Windows 窗体系统(如果对任何人都重要,则使用 C#)。由于此应用程序面向不精通计算机的用户,因此我决定使用向导 UI 为用户简化操作。我想避免将视图和视图引擎(将从其构建向导)耦合到自动化引擎。

我遇到的问题是自动化引擎在执行其操作时在单独的线程上运行,需要将状态信息报告给用户,并监听来自用户的取消或暂停事件。由于我不希望视图引擎或自动化引擎相互依赖,因此我很难弄清楚如何提供此信息管道。

我对这个问题的任何见解将不胜感激。在这一点上,我已经绞尽脑汁好几个星期了,我真的不想放弃,只是把所有东西结合在一起。

如果有人需要更多详细信息来帮助提出某种想法,请告诉我,我很乐意提供。

0 投票
3 回答
449 浏览

c# - 在 ASP.NET 中将内容 (aspx) 与代码 (aspx.cs) 分离

我想知道将 aspx 页面(ASP.NET 3.5)的内容与代码(我使用的是 C#)分开的最佳做法是什么。我有一个表单,用户可以在其中输入数据 - 例如,他们可以输入百分比。如果他们输入无效的数据,他们会收到一条错误消息:

所以本质上我隐藏了错误消息并根据用户输入的内容显示错误消息。

我相信这是将内容与背后的代码分开的最佳方式。但是,如何根据用户输入选择元素并隐藏/取消隐藏它们?我知道我可以对元素执行 runat="server" 但问题是我不能按类选择并且仅限于 ID。

您推荐什么解决方法?除了将值放入众所周知难以调试的代码中。

这在 ASP.NET 4 中是否也已“修复”?而且我有兴趣仅通过 C#/ASP.NET 执行此操作,因为有些人禁用了 JavaScript。这意味着我必须检查客户端和服务器端的错误。

0 投票
3 回答
1502 浏览

asp.net-mvc - 'CreateMap' 语句应该去哪里?

我经常使用 AutoMapper 将模型(域)对象映射到 ViewModel 对象,然后以模型/视图/视图模型模式由我的视图使用。

这涉及许多“Mapper.CreateMap”语句,它们都必须执行,但在应用程序的生命周期中只能执行一次

那么,从技术上讲,我应该将它们全部保存在某个静态方法中,该方法从我的 Application_Start() 方法(这是一个 ASP.NET MVC 应用程序)中调用。

但是,将许多不同的映射关注点集中在一个中心位置似乎是错误的。

特别是当映射代码变得复杂并涉及格式化和其他逻辑时。

有没有更好的方法来组织映射代码,使其保持接近它所关注的 ViewModel?

(我想出了一个想法——在每个 ViewModel 上都有一个“CreateMappings”方法,在 BaseViewModel 中,在实例化时调用此方法。但是,由于该方法只能在应用程序生命周期中调用一次,因此需要一些额外的逻辑来缓存已调用 CreateMappings 方法的 ViewModel 类型列表,然后仅在必要时为不在该列表中的 ViewModel 调用它。)

0 投票
2 回答
427 浏览

asp.net - 如何从 WCF Web 服务中分离业务逻辑和数据库调用?

这个问题之前可能已经被问过,但我正在寻找与我所看到的不同的答案。

我们的网站在 ASP.NET 中,我们使用模型-视图-演示者模式从标记代码隐藏中获取业务逻辑。

是否有一种可接受的 Web 服务模式用于从代码隐藏中获取业务逻辑?将逻辑放在“演示者”中似乎是一种误导,因为调用并没有真正向用户呈现任何内容,甚至可能不会将数据发送回客户端。

0 投票
1 回答
263 浏览

asp.net-mvc - 关注点和身份验证分离

我正在努力成为一名优秀的开发人员并将我的担忧分开。我有一个包含所有 Web 代码的 ASP.NET MVC 项目,以及一个包含所有模型代码的 DAL 项目。

有时,DAL 中的代码需要检查当前用户是否有权执行某些操作,方法是检查CurrentUser.IsAdmin.

对于网站,当前来自 Windows 用户名(来自HttpContext.Current.User.Identity),但这显然是一个网络问题,不应与 DAL 耦合。

松散耦合身份验证的最佳模式是什么?DAL 应该向 MVC 代码询问用户名,还是 MVC 告诉 DAL?其中一个有优点或缺点吗?

谢谢!

0 投票
3 回答
1030 浏览

c# - MVVM 模式的哪一部分负责对数据网格进行分组

我一直在修补 MVVM 模式,现在我正在尝试基于它实现一个小应用程序。

这个应用程序有一个数据网格,令人惊讶的是,其中显示了一些数据。现在我正在尝试为其添加一些分组功能。我知道如何在代码(C# 和 XAML)中编写它,但我想知道我应该将负责的代码放在哪一层。

我的一部分告诉我它应该在视图中,因为它是专门针对特定视图的代码。它不是通用的,仅用于一个目的:对数据进行分组。

另一方面,我认为我应该使用命令在 ViewModel 中处理它。但是,感觉好像我用 View 特定的逻辑污染了我的 ViewModel。

有什么可以解决的吗?

0 投票
2 回答
86 浏览

java - XML 子树中属于父级的属性

假设我有这个 XML

这就是它的解析方式(伪代码):

ObjectsParser负责解析对象位,但不知道也不应该知道文档的存在。但是,Document颜色通过使用 与对象相关联Map

您会建议使用哪种模式将颜色设置返回给DocumentParser.parsefrom,ObjectsParser.parse以便将其与地图中它们所属的对象相关联?

替代方案是这样的:

丑陋!

0 投票
3 回答
270 浏览

c# - TDD,创建抽象层

基本上,我的工作场所有一个提供 OCR 功能的系统。该过程是,第三方应用程序被配置为显示捕获的屏幕(在 OCR 过程中),并且用户坐在 pc 上确保捕获的数据是正确的。

此捕获阶段对每个字段进行验证。例如,如果文件是特定客户的发票,则根据参考数据验证发票的供应商。验证码是我自己从Visual Studio 2008解决方案生成的编译后的.net dll的形式。

第三方接口用于捕获表单和我编写的代码之间的通信。一个例子是;

我希望做的是创建一个抽象层,从该代码中删除第 3 方接口(分离关注点),这将允许更轻松的测试(TDD)等。

我对这些方法不熟悉,如果我做出任何错误的假设,我深表歉意。我只是想知道是否可以就如何继续编写代码获得一些建议。在某些时候,我们(公司)可能会选择使用不同的第 3 方 OCR 应用程序。

提前致谢