25得票6回答
信息专家和Tell Don't Ask原则是否与单一职责原则相矛盾?

信息专家、告诉而不是询问和单一职责原则经常被提及作为最佳实践方法。但我认为它们存在矛盾。这就是我的观点。 倾向于SRP的代码,但违反了Tell-Don't-Ask和Info-Expert原则: Customer bob = ...; // TransferObjectFactory has...

25得票6回答
当使用单一责任原则时,如何确定一个“责任”应该粗粒度或细粒度?

在SRP中,“责任”通常被描述为“修改原因”,这样每个类(或对象?)都应该只有一个人需要进去更改的原因。 但是,如果您将其细化到极致,您可以说将两个数字相加的对象是一种责任和可能的更改原因。因此,该对象不应包含任何其他逻辑,因为它会产生另一个更改原因。 我想知道是否有人有任何“作用域”策略...

24得票4回答
如何遵循迪米特法则?

每当我看到关于Demeter法则的文章时,作者似乎从未给出如何遵守该法则的实例。他们都解释了这是什么,并且展示了违反该法规的示例,但那太简单了。 可能有很多方式可以遵守这个法则(良好的设计和规划就是其中之一),但用非常简单的术语来说,这是否是遵守法则的一种方式? 假设我有一个带有以下属性的...

24得票4回答
如何在C#中使用依赖注入和继承

介绍 大家好,我正在使用C#编写一个持久化库。在这个库里,我实现了仓储模式,但是我遇到了SOLID原则的问题。下面是一个简化版的当前实现,以便集中讨论关键问题: 在持久化库中包含的抽象仓储:public abstract class Repository<T> { pro...

22得票7回答
使用多态实现清除开关条件的干净代码

根据SOLID原则,通过将switch条件转换为类和接口来消除它们通常更好。我想用以下代码实现此目标: 注意:这不是真正的代码,我只是把我的想法放进去了。 MessageModel message = getMessageFromAnAPI(); manageMessage(messa...

22得票5回答
如何将SOLID原则应用到现有项目中

很抱歉这个问题有些主观,但我有点困惑,希望得到任何处理这个问题的人的指导和建议: 我编写了一个非常庞大的RESTful API项目,使用C# 2.0编写,我的一些类已经变得非常大。我的主API类就是其中一个例子 - 包含几十个成员和方法(可能接近数百个)。正如你所想象的那样,这已经成为一个小...

22得票9回答
默认实现的设计模式:空方法实现

有没有一个特定的设计模式,描述了这样一种情况:提供非抽象默认实现,它使用空的NO-OP实现来实现接口上的所有或某些方法。这样做是为了减轻子类实现它们自己可能不需要/使用的方法的负担: public interface MyInterface { public void doThis(...

22得票5回答
如何实践面向对象设计的SOLID原则?

我对SOLID原则不太熟悉,但我了解它。我的主要问题是很难设计出符合SOLID原则的类,尤其是依赖倒置。有时将整个逻辑编写成过程模式比使用SOLID更容易。 例如: 假设我们正在创建一个考勤监控系统,并有一个逻辑(或过程)扫描员工指纹,获取其ID,确定它是否有效,确定他何时进入,写入登录信...

22得票4回答
DDD:在领域实体上,应该放置哪些行为?

我的团队非常努力地坚持领域驱动设计作为一种架构策略。但是,大多数情况下,我们的领域实体相当无力。我们希望在我们的领域实体上放置更多的业务/领域行为。 例如,Active Record将数据访问放在实体上。我们不想这样做,因为我们很高兴使用仓储模式进行数据访问。 此外,我们设计软件时要遵循SOL...

22得票4回答
"高内聚"是否是"单一职责原则"的同义词?

高内聚性是否是单一责任原则的同义词?如果不是,它们有何不同之处?