Tag: Srp

iOS上的Cleaner Architecture

今天,我不会教您任何新手或突破性的东西。 相反,我只是想提醒您一些您已经知道的事情:单一责任原则(SRP)。 更具体地说,我想讨论如何在干净的体系结构中正确使用它,并且假定您已经对它有所了解(如果不是,我建议您阅读下面的资源,然后再回来)。 因此,请不要忘记提醒自己在制定决策时明确考虑SRP,并希望这将有助于我们设计更好的软件! 什么是SRP? 这里是一个定义[1]:“单一责任原则是一种计算机编程原则,它指出每个模块或类都应对软件提供的功能的一部分负责,而责任应由类完全封装。 其所有服务应严格地与这一责任保持一致”。 一个班级只有一个改变的理由。 这样做将使更改变得更容易,减少耦合,提高可测试性,加快开发速度等等! SRP也是干净架构的基本思想(但是,它当然也适用于其他方法,例如MVC,MVVM,反应式等)。 为什么不使用MVC? 明显的答案是:因为Massive View Controller。 这当然是个玩笑–但很有趣,因为它是真的。 几乎可以问一个问题:当MVC导致大量问题(例如大规模视图控制器)时,为什么MVC是iOS上的默认体系结构? 答案是,这首先不是问题。 如果控制器很大,那不是体系结构的问题,而是程序员没有正确使用它。 您可以使用MVC编写一个非常干净的应用程序,而大型视图控制器问题可以通过以下方式轻松解决: 在一个场景中不只使用一个控制器, 将工作委托给工人/服务班级。 换句话说,通过应用SRP。 那么,如果不是MVC,那么为什么要使用干净的体系结构呢? 如果在iOS上使用的MVC出现问题,则说明它相当模糊,并且将许多决策留给了程序员。 控制器的责任是什么? 如果您不小心,它将获得太多。 但是,我们将所需的所有其他责任放在哪里? 在模型中? 我们该如何构造? 该架构并没有真正告诉我们任何这些。 我们靠自己,这意味着有很多机会引入错误! 如果您不想考虑所有这些,则可以使用简洁的体系结构。 干净的体系结构明确地在其类之间划分了一些职责:演示者弥合了UI和业务逻辑之间的鸿沟,交互者处理了我们的用例,路由器帮助我们进入了新的场景,等等。职责很明确,我们的代码库更加简洁。 那么,仅通过使用干净的体系结构,我们是否可以解决问题? 现在我们的代码库中有SRP吗? 好吧,不一定。 架构是很有帮助的,但不能解决我们所有的问题。 我们仍然需要思考,做出选择,并付出一些努力使事情变得更加干净。 MIP 干净的架构在Apple平台上已变得非常流行,这是有充分的理由的。 我们甚至可以选择几种方法,例如VIPER [4]和Clean Swift [3]。 让我们看一些使用Clean Swift(或我喜欢称之为CS的真实项目),它与我们在iOS上使用的体系结构的命名约定一致。 我见过带有大型和复杂交互器的代码库,这些代码库显然不遵循SRP。 我称其为巨大的交互器问题(MIP)。 MIP可能不如大型视图控制器那么糟糕,因为交互器并不关心UI,但它们仍然尝试做太多事情。 如果程序员能够编写大规模的视图控制器,那么他当然也会编写出色的大规模交互器。 问题是,即使我们认为我们使用的是干净的体系结构,责任也没有得到适当的分离,因此没有尽其所能。 为避免MVC / MIP问题的根本原因,我们将无情地应用SRP。 交互器包含应用程序业务逻辑,但是每个视图控制器只有一个交互器。 […]

固体-iOSразработке。 Принципединственнойответственности

Введение ВэтомциклестателбырассказатьоSOLIDпринципах,и,чтосамоеглавное,дополнитихпра Понимаясмыслиспользованиякаждогопринципа,从 Немногоистории Вначале2000-хРобертМартин,такжеизвестныйкакдядюшкаБоб,придумалсписокиз11принриоооое Первые5принциповописывали,каксделатьхорошийдизайнкласса。 使用SOLID ,则必须使用ПозжеонисталиизвестныподговорящейаббревиатуройМайкломФизерсом。 Этипринципыпомогаютписатьнадежный,гибкийкод。 Надежностьозначаетпростотуипонятностькода ,чтопозволяетлегковноситьвнегоизменения,упро Гибкостьпозволяетсминимальнымиусилиямимасштабироватьпроект ,则需将кодовуюбазубезвредвредвред。 固体 Чтожеобозначаетаббревиатура? S — 单一责任原则(SRP ) (SRP )或Принципединственнойответственности O — OCP ( 开放式封闭原则 ) L —ПринципподстановкиБ。 Лисков(里斯科夫替代原理LSP ) I — ISP ( 接口隔离原则,Interface Separation Principle,ISP ) D — 依赖倒置原理,DIP )( D) (Принципинверсиизависимостей) Опытномуразработчикумогутбытьочевиднывсепринципыдажепослебыстроговзгляданаихрасшифров。 Нооченьчастомногиеначинающиеразработчикинедоконцапонимают,почемуэтипринципытакважны。 Дляустраненияэтогопробелавзнанияхдавайтепройдемсяпокаждомуизних。 Принципединственнойответственности РобертМартинописывалеготак: Каждыйклассдолжениметьтолькооднупричинудляизменения Другимисловами,объектдолженнеститолькооднуответственность。 Егоинтерфейсиимплементациядолжныбытьнаправленытольконаэтуответственность。 Принципдолженсоблюдатьсявсигда:нетолькоприпроектированиикласса,ноиприегобагфиксе。 Оченьчастокласссоздается,следуяпринципу,нопотомвнегопопадаетвсё,чтотольковозможно。 […]