标签: solid-principles

使用空方法的默认实现的设计模式

是否有特定的设计模式描述了提供非抽象默认实现的场景,该实现使用空的NO-OP实现实现接口上的所有或部分方法.这样做的目的是减轻子类的负担,实现他们自己可能不需要/使用的方法:

public interface MyInterface {
    public void doThis();
    public void doThat();
    public void done();
}

public class MyClass implements MyInterface {
    public void doThis() {
        // NO-OP
    }
    public void doThat() {
        // NO-OP
    }
    public void done() {
        // Some standard implementation
    }
}

public class MuSubClass extends MyClass {
    public void doThat() {
        // Subclass only cares about doThat()
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经看到过这种模式多次使用,包括SAX框架中的Java的DefaultHandlerMouseAdapter.在某些情况下,这些类被命名为Adapters,但我的印象是适配器模式在两个不同的接口之间进行转换.

鉴于在这些实例中只有一个声明的接口被转换为该接口的未定义子集 - 我不清楚这是如何在适配器模式的精神.

此外,我不太明白这是如何遵循NullObject模式的,因为某些方法可能有一个实现,而NullObject传统上是一个单例.

design-patterns adapter null-object-pattern solid-principles interface-segregation-principle

21
推荐指数
1
解决办法
6382
查看次数

接口隔离原理 - 编程到接口

我正在阅读有关SOLID和其他设计原则的内容.我认为ISP与"程序接口,而非实现"相同.但看起来这些是不同的原则?

有区别吗?

oop design-patterns solid-principles interface-segregation-principle

21
推荐指数
3
解决办法
5744
查看次数

OOP有什么规则吗?

最近我听说OOP(Java)有9条规则.我只知道四个是抽象,多态,继承和封装.OOP还有更多规则吗?

oop rules solid-principles package-design

20
推荐指数
3
解决办法
8448
查看次数

伟大的软件设计和实现的例子

我希望这不是重复......

您遇到的最完善的软件系统/框架/应用程序是什么?

似乎TDD,SOLID原则,OO设计模式以及类似的东西可以使用非常简单的示例在播客和博客上轻松理论化,但很难想象开发完全符合这些标准的大型系统,而不会爆炸代码.在我的公司,由于我们的时间限制,完全TDD似乎几乎是不可能的.

如果有人能指出我任何优秀的开源项目,我真的很想深入了解TDD/SOLID等等.好像.谢谢.

oop tdd open-source design-patterns solid-principles

20
推荐指数
1
解决办法
7901
查看次数

在"现实世界"中使用单一责任原则

我基本上想要了解那些认为在现实世界代码中使用单一责任原则合理的人的百分比以及实际执行的数量.在播客#38中 Joel谈到了这个OOP原则是如何无用的真实世界; 而且这表明,像鲍勃叔叔这样的人可能没有写过非平凡的系统.

我个人在一些软件项目中写过或发挥过重要作用,但现在才在我年轻的职业生涯中遇到过这种模式.我喜欢这个原则的声音,并且真的想开始使用它.我发现Joel在播客中的论点相当薄弱(如果你继续阅读这里的博客评论那么其他人也是如此).但是,它有什么道理吗?

社区的想法是什么?

oop single-responsibility-principle solid-principles

19
推荐指数
3
解决办法
2714
查看次数

如何将SOLID原则实现到现有项目中

我为这个问题的主观性而道歉,但我有点卡住了,我希望以前能够处理这个问题的人提供一些指导和建议:

我有(成为什么)一个用C#2.0编写的非常大的RESTful API项目,我的一些类变得非常可怕.我的主要API类就是一个例子 - 有几十个成员和方法(可能接近数百个).你可以想象,它变成了一个小噩梦,不仅仅是维护这段代码,甚至只是导航代码已经成为一件苦差事.

我是SOLID原则的新手,我是设计模式的忠实粉丝(但我仍处于可以实现它们的那个阶段,但还不足以知道何时使用它们 - 在不太明显的情况下) .

我需要打破我的班级规模,但我不知道如何最好地去做.我的StackOverflower伙伴能否建议他们采用现有的代码单块并将其缩小到适当大小?

c# design-patterns solid-principles

18
推荐指数
1
解决办法
4161
查看次数

DDD:我应该在域实体上放置什么样的行为?

我的团队非常努力地坚持使用Domain Driven Design作为架构策略.但是,在大多数情况下,我们的域实体非常有限.我们希望在我们的域实体上添加更多业务/域行为.

例如,Active Record将数据访问权限放在实体上.我们不希望这样,因为我们乐于使用存储库模式进行数据访问.

此外,我们将我们的软件设计为SOLID(Bob叔叔放在一起的五个软件设计原则).因此,在设计我们的实体时,我们注意单一责任,开放闭合,liskov,接口隔离和依赖性反转对我们很重要.

那么,我们应该包括哪些行为?我们应该远离什么样的?

entity domain-driven-design solid-principles

17
推荐指数
1
解决办法
6332
查看次数

SOLID原则和编译?

例如,关于Single Responsibility原则:

我们来谈谈一Radio堂课:

在此输入图像描述

有人可能会说,Radio班级有两个职责,即音量和电台管理.这些操作将使用它从客户端的完全不同的区域调用.

因此我们有这个:

在此输入图像描述

一切都很好.

但我总是看到这样的句子:

所以现在,当我们需要改变,这取决于损坏的元件上的所有代码并不甚至需要重新编译.

等一下 !

如果我需要更改VolumeManager 类 - 我将不必重新编译RadioStationManager. 但是我必须停止(在web中)iis以便应用程序使用新的DLL,它将导致应用程序关闭.

此外,在console,我将不得不终止整个程序,以便更改dll,因为它被进程锁定(你不能在应用程序运行时更改DLL - 文件被锁定)

即使我将使用GAC - 我将不得不停止该程序,以便使用dll.

那么它能拯救我什么?编译就是 - 右键单击​​并构建.就这样

我没有看到提到的好处:" 你只需要编译破碎的类...... "

我错过了什么?

http://www.gontu.org/solid-single-responsibility-principle/寻找单词" build"

http://epic.tesio.it/doc/manual/solid_principles.html寻找单词" recompiled"

http://www.dananhudson.com/?tag=solid寻找单词" recompile"

.net c# design-patterns compilation solid-principles

17
推荐指数
2
解决办法
891
查看次数

开发Swift iOS应用程序"正确的方法"

最近,我学习了Swift以及开发iOS应用程序的基础知识.现在,我想自己开发一个真正的应用程序,但我非常关心编写好的代码,所以我一直在寻找"最佳实践","设计模式"和"正确的方法"来实现它.

在我的搜索中,我发现了这个关于Swift iOS应用程序中通常使用的所有设计模式的精彩教程以及它们在何处使用的示例.

但是我认为这个教程很棒并且对我帮助很大,我觉得这只是一个开始,因为我看到很多SOLID原则违规.例如:

请参阅LibraryAPI中实现的外观模式:

class LibraryAPI: NSObject {

    private let persistencyManager: PersistencyManager
    private let httpClient: HTTPClient
    private let isOnline: Bool

    class var sharedInstance: LibraryAPI {

        struct Singleton {
            static let instance = LibraryAPI()
        }

        return Singleton.instance
    }

    override init() {
        persistencyManager = PersistencyManager()
        httpClient = HTTPClient()
        isOnline = false

        super.init()
        NSNotificationCenter.defaultCenter().addObserver(self, selector:"downloadImage:", name: "BLDownloadImageNotification", object: nil)
    }

    deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }

    func getAlbums() -> [Album] {
        // ... Not relevant
    }

    func addAlbum(album: Album, index: Int) { …
Run Code Online (Sandbox Code Playgroud)

iphone design-patterns ios solid-principles swift

17
推荐指数
2
解决办法
2926
查看次数

如何练习OOP设计的SOLID原理?

我是SOLID原理的新手,但我理解它.我的主要问题是很难设计我的类以遵循SOLID特别是依赖倒置.有时将整个逻辑写入过程模式而不是使用SOLID很容易.

例如:

假设我们正在创建一个考勤监控系统,我们有逻辑(或程序)扫描员工指纹,获取它的ID,确定它是否有效,确定他在什么时间,写入登录信息到数据库,并显示它是否成功.

用一堆'if else',循环和开关以程序方式编写它很容易.但在未来,我将遭遇"代码债务".

如果我们在这里应用SOLID原则.我知道我们需要有一些像'AttendanceServiceClass'这样的对象,它有一个像'scanEmployeeID()','processthislogin()'或'isItsucessful()'这样的方法.我知道这个类依赖于存储库,userinfo和其他对象.

基本上我的问题是分析类的设计及其依赖性

分析课程设计的一步一步是什么?

对不起我的英语不好.

design-patterns dependency-injection solid-principles

16
推荐指数
3
解决办法
1万
查看次数