Вопросы с тегом «solid»

34
Где вы должны положить константы и почему?

В наших в основном больших приложениях у нас обычно есть только несколько мест для «констант»: Один класс для графического интерфейса пользователя и внутренних констант (заголовки вкладок, заголовки групповых блоков, коэффициенты вычислений, перечисления) Один класс для таблиц и столбцов базы...

33
Дополнительная строка в блоке против дополнительного параметра в чистом коде

контекст В Чистом коде , на странице 35, написано Это подразумевает, что блоки внутри операторов if, операторов else, операторов while и т. Д. Должны быть длиной в одну строку. Вероятно, эта строка должна быть вызовом функции. Это не только уменьшает объем включаемой функции, но также добавляет...

30
Разработка класса, который будет принимать целые классы в качестве параметров, а не отдельные свойства

Например, у вас есть приложение с широко используемым классом, которое называется User. Этот класс предоставляет всю информацию о пользователе, его идентификаторе, имени, уровнях доступа к каждому модулю, часовом поясе и т. Д. Очевидно, что пользовательские данные широко используются во всей...

28
Сколько слишком много интерфейсов в классе? [закрыто]

Закрыто . Этот вопрос основан на мнении . В настоящее время не принимает ответы. Хотите улучшить этот вопрос? Обновите вопрос, чтобы ответить на него фактами и цитатами, отредактировав этот пост . Закрыто 4 года назад . Вероятно, я бы посчитал запахом кода или даже анти-паттерном иметь класс,...

27
Что может пойти не так, если нарушится принцип подстановки Лискова?

Я следил за этим высоко оцененным вопросом о возможном нарушении принципа подстановки Лискова. Я знаю, что такое принцип подстановки Лискова, но мне все еще неясно, что может пойти не так, если я, как разработчик, не задумываюсь над этим принципом при написании объектно-ориентированного...

27
Статические классы со статическими методами считаются SOLID?

SOLID включает принцип подстановки Лискова, который имеет понятие, что «объекты в программе должны заменяться экземплярами их подтипов без изменения правильности этой программы». Поскольку статические классы со статическими методами (немного похожими на Mathкласс) вообще не имеют экземпляров,...

27
ТВЕРДЫЙ против избежания преждевременной абстракции

Я понимаю, что SOLID должен выполнять, и регулярно использую его в ситуациях, когда модульность важна и ее цели явно полезны. Однако две вещи мешают мне применять его последовательно в моей кодовой базе: Я хочу избежать преждевременной абстракции. По моему опыту, рисование линий абстракции без...

26
Существуют ли варианты ООП, в которых некоторые или все принципы SOLID противоположны чистому коду?

Недавно у меня был разговор с моим другом об ООП в разработке видеоигр. Я объяснял архитектуру одной из моих игр, которая, к удивлению моего друга, содержала много небольших классов и несколько уровней абстракции. Я утверждал, что это было результатом того, что я сосредоточился на том, чтобы дать...

23
Выберите дизайн кода или лень в мире банка

Я работал два года в отличном инвестиционном банке. Я сделал несколько технических проектов, стремясь создать максимально оптимизированный код, соблюдая адаптированные шаблоны хорошего дизайна, принцип SOLID, закон деметрии и избегая всевозможных повторяющихся кодов ... Когда поставка в...

20
Не нарушают ли частные случаи с запасными вариантами принцип подстановки Лискова?

Допустим, у меня есть интерфейс, FooInterfaceкоторый имеет следующую подпись: interface FooInterface { public function doSomething(SomethingInterface something); } И конкретный класс, ConcreteFooкоторый реализует этот интерфейс: class ConcreteFoo implements FooInterface { public function...

16
Является ли семантический контракт интерфейса (ООП) более информативным, чем сигнатура функции (ФП)?

Некоторые говорят, что если вы доведете принципы SOLID до крайности, вы в конечном итоге окажетесь в функциональном программировании . Я согласен с этой статьей, но думаю, что при переходе от интерфейса / объекта к функции / закрытию теряется некоторая семантика, и я хочу знать, как функциональное...

15
Как применить принцип разделения интерфейса в C?

У меня есть модуль, скажем «M», в котором есть несколько клиентов, скажем «C1», «C2», «C3». Я хочу распределить пространство имен модуля M, то есть объявления API и данных, которые он предоставляет, в файл (ы) заголовка таким образом, чтобы - для любого клиента видны только те данные и API, которые...

15
Заставляет ли меня разработка, основанная на тестировании, следовать SOLID?

Я много слышал от практиков TDD , что одним из преимуществ TDD является то, что он заставляет разработчиков следовать принципам SOLID (единая ответственность, открытый-закрытый, замена Лискова, разделение интерфейса и инверсия зависимостей). Но для меня достаточно просто написать несколько тестов...

14
Насколько конкретным должен быть шаблон единой ответственности для классов?

Например, предположим, что у вас есть консольная игровая программа, которая имеет все виды методов ввода / вывода в консоль и из консоли. Будет ли это быть умным , чтобы держать их все в одном inputOutputклассе или разбить их на более конкретных классы , как startMenuIO, inGameIO, playerIO,...

14
Как придерживаться принципа открытого-закрытого на практике

Я понимаю цель принципа открытого-закрытого. Он предназначен для того, чтобы уменьшить риск поломки чего-либо, что уже работает при его изменении, предлагая вам попытаться расширить без изменения. Однако у меня возникли проблемы с пониманием того, как этот принцип применяется на практике. Насколько...

14
Может ли класс RxJava Flowable законно иметь 460 методов?

Я только начинаю с RxJava , Java-реализации ReactiveX (также известной как Rx и Reactive Extensions ). То , что действительно поразило меня массовый размер RxJava в текучий классе : он имеет 460 методы! По честному: Есть много методов, которые перегружены, что значительно увеличивает общее...

14
Два противоречивых определения принципа разделения интерфейсов - какое из них правильное?

При чтении статей об ISP, кажется, есть два противоречивых определения ISP: Согласно первому определению (см. 1 , 2 , 3 ), провайдер заявляет, что классы, реализующие интерфейс, не должны принуждаться к реализации функций, которые им не нужны. Таким образом, толстый интерфейсIFat interface IFat {...

14
Как проверить принцип подстановки Лискова в иерархии наследования?

Вдохновленный этим ответом: Лиск принцип замещения требует , что Предпосылки не могут быть усилены в подтипе. Постусловия не могут быть ослаблены в подтипе. Инварианты супертипа должны быть сохранены в подтипе. Ограничение истории («правило истории»). Объекты считаются изменяемыми только через их...

14
Реальный мир - принцип замещения Лискова

Справочная информация: я разрабатываю систему обмена сообщениями. Эта структура позволит: отправка сообщений через сервисную шину подписка на очереди в шине сообщений подписка на темы в шине сообщений В настоящее время мы используем RabbitMQ, но я знаю, что мы перейдем на Microsoft Service Bus (в...

13
Стек, расширяющий LinkedList. Нарушение принципа подстановки Лискова?

Существует класс LinkedList с такими функциями, как add_first (), add_last (), add_after (), remove_first (), remove_last () и remove () Теперь есть класс Stack, который предоставляет такие функции, как push (), pop (), peek () или top (), и для реализации этих методов он расширяет методы класса...