问题标签 [responsibility]

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 投票
2 回答
295 浏览

oop - 基于责任的建模与改变的类原因

这篇文章中,我读到

警惕一个只是荣耀责任的组件。组件应该捕获在系统中有目的的抽象。有可能在某一时刻作为一个有意义的组件出现实际上只是一个单独的责任。该责任可以分配给一个组件。

这让我很困惑。如果一个类应该只有一个改变的理由,它似乎应该有一个责任。但现在看来我把这个太窄了。在基于责任的建模的背景下,能否以某种方式解释责任和改变的理由?一个类是否可以有两个以上的职责,并且仍然有一个改变的理由(或相反)?

0 投票
2 回答
228 浏览

oop - 正确设计代码编辑器应用程序

我正在从事个人项目,它基本上是一个代码编辑器。想象一下带有菜单项新建、打开、保存、另存为、全部保存、关闭、全部关闭的标准文件菜单。

我坚持正确的设计。目前我有:

  • 一个 Document 类,它代表一个文档 - 代码编辑控件、选项卡栏中的相应选项卡以及各种属性,例如 Caption、Filename、IsModified 等。
  • 代表所有打开文档的 Documents 类。包含 New、Open(FileName)、...等方法

问题是我无法弄清楚哪个类/菜单命令负责哪些任务。

例如,使用 File->New 菜单命令很简单 - 调用 Documents.New 就可以了。

但是文件->打开呢?Documents.Open 方法需要文件名作为参数。所以在调用这个方法之前,我需要打开一个文件选择对话框,让用户选择文件并为每个文件调用 Documents.Open(FileName)。此支持代码的最佳位置在哪里,在菜单命令中,重写 Documents.Open 并将其放在那里?

保存操作也是如此。哪个负责储蓄?是使用 Document.Editor.SaveToFile(FileName) 的 Documents 类还是更好地在 Document 类中创建 Save 方法?中间的某个地方还需要询问用户是否要保存当前文档...

我被困住了。有任何想法吗?

编辑:编程语言是Delphi。

0 投票
3 回答
1030 浏览

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

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

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

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

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

有什么可以解决的吗?

0 投票
1 回答
3125 浏览

domain-driven-design - 与服务层或域对象本身的接口?(DDD)

我仍在学习 DDD,我有这两个(可能很简单)问题:

如果工厂创建了新的对象/图形/聚合实例,而且还从Repository “重构”了对象/图形,那么:

(1)您的服务层函数/作业/任务/工作单元是否调用工厂或实体实例或 DomainService 函数上的行为方法?基于这些组件的责任,我迷失了调用堆栈。

(2) Entity 实例甚至有像上面那样的“行为方法”吗?例如,帖子是否有p.UpdatePost(string bodyText)或不是域模型的关注点,因此存储库也应该实现相同的目标?或者服务层函数,在这种情况下是否应该调用存储库并且实体实例只是具有特定于域而不是持久性的行为方法?但是,为什么听起来“更新帖子”是一个域功能,而这是用户的目标呢?

你可以看到我到处都是。请帮忙。

0 投票
1 回答
254 浏览

model-view-controller - 确定保存设置(控制器、服务和映射器)的责任

编辑:

因为我将最初的赏金授予300@arcain 太晚了,所以我要重新开放。并将额外的奖励授予150@arcain。当然,除非有人提供更好的答案。:)

/ 编辑

考虑以下形式:

上表的设置将保存在一个数据库表中,其中列映射到上述列(显然不包括最后一列)。

所有(保存和删除)操作都直接发送到本地化控制器。本地化控制器基本上调用 LocalizationService 上的方法,如下所示:

LocalizationService 又调用 LocaleMapperDb,如下所示:

但是,保存此设置的责任是:

它将保存在名为 site_settings 的数据库表中。我想到了几个选择:

  • 在 LocalizationController 中使用 SiteService / SiteSettingsService。但是,完整的表单已经在 LocalizationService 中生成和处理。
  • 在 LocalizationService 中使用 SiteMapperDb / SiteSettingsMapperDb 并在 updateCollection( $_POST ) 中使用它
  • 在 LocaleMapperDb 中使用 SiteMapperDb / SiteSettingsMapperDb

第一个和最后一个选项看起来是最糟糕的选项,但我不确定。你觉得最好的选择是什么?或者,也许您有其他选择,我没有想到?

0 投票
2 回答
145 浏览

.net - .Net 类库:线程责任

我正在研究一个类库,其中一个类负责使用XDocument.Load(url)从 Internet 检索 Xml 文件。鉴于此操作可能需要几秒钟才能完成,因此在它自己的线程上运行它是有意义的。

创建这个线程是谁的责任?检索文件的消费者或类?有没有关于这方面的最佳实践?

0 投票
5 回答
446 浏览

java - 你如何命名一个只调用其他方法的类/方法?

假设我遵循单一职责原则,并且我有以下课程。

如您所见,它遵循原则,所有类/方法的名称都说明了它们的作用。现在我有另一个类有这样的方法。

如您所见,“someMethod”-Method 确实调用了提取、转换和添加。我现在的问题是,你怎么称呼这样的类/方法?它实际上不是提取、转换或添加,而是调用这些?如果你以它的职责命名该方法,那会是什么?

0 投票
5 回答
1139 浏览

c# - 缓存/记忆函数结果是谁的责任?

我正在开发允许用户通过实现一组接口来扩展系统的软件。

为了测试我们所做工作的可行性,我的公司通过以与用户完全相同的方式在这些类中实现我们所有的业务逻辑来“吃自己的狗粮”。

我们有一些实用程序类/方法将所有内容联系在一起并使用可扩展类中定义的逻辑。


我想缓存用户定义函数的结果。我应该在哪里做这个?

  • 是班级本身吗?这似乎会导致大量代码重复。

  • 是使用这些类的实用程序/引擎吗?如果是这样,不知情的用户可能会直接调用类函数而不会获得任何缓存好处。


示例代码

LetterUtility 是否应该负责缓存?每个单独的ILetter实例都应该吗?还有其他完全可以做的事情吗?

我试图使这个示例简短,因此这些示例函数不需要缓存。但是考虑一下我添加了这个类,(new C()).GetAnimalsThatStartWithMe()它每次运行都需要 10 秒:

我发现自己在使我们的软件尽可能快和维护更少的代码(在本例中:将结果缓存LetterUtilityC

0 投票
3 回答
1451 浏览

c# - 数据访问层 - 设计类应该负责创建保存

我正在使用 ADO.NET 2.0 和 C#、Sql Server 2005 设计数据访问层。我经常与我的大脑争夺这些调用的位置。对于可维护的健壮代码,我应该遵循以下哪种方式。

方法一

方法二

我会使用像下面这样的另一个类来进行核心数据访问。像下面

0 投票
4 回答
3052 浏览

java - Android HelloWorld 响应

我知道这个线程的标题听起来很傻,但我无法修复我的代码。

我的问题是我在模拟器中遇到错误:进程没有响应或类似的东西。为什么?!这个应用程序这么小,为什么它不起作用?!请帮我。

编辑