Arhn - архитектура программирования

Принципы дизайна

Каким принципам вы обычно следуете при проектировании классов?

19.09.2008

Ответы:


1

Принципы объектно-ориентированного проектирования классов (принципы SOLID)

  • SRP: принцип единой ответственности. У класса должна быть одна и только одна причина для изменений.
  • OCP: принцип открытости-закрытости. У вас должна быть возможность расширять поведение классов, не изменяя его.
  • LSP: принцип замещения Лискова Производные классы должны заменять свои базовые классы.
  • Интернет-провайдер: принцип разделения интерфейсов. Создавайте мелкозернистые интерфейсы, ориентированные на клиента.
  • DIP: принцип инверсии зависимостей. Зависите от абстракций, а не от конкреций.

Источник: http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

Видео (дядя Боб): Чистое кодирование Роберта К. Мартина (дядя Боб)

19.09.2008

2

Не забывайте Закон Деметры.

19.09.2008

3

S.O.L.I.D. принципы.
По крайней мере, я стараюсь не слишком сильно от них уклоняться.

19.09.2008

4

Самым фундаментальным шаблоном проектирования должен быть KISS (пусть это будет просто глупо). Это означает, что иногда вообще не использовать классы для некоторых элементов - это правильное решение.

Это и карточки CRC (Class, Responsibility, Collaborators) (запишите карточку в своих файлах заголовков, а не на настоящих карточках, потому что документация тоже проста для понимания)

19.09.2008

5

Как упоминалось выше, некоторые из фундаментальных принципов объектно-ориентированного дизайна - это OCP, LSP, DIP и ISP.

Превосходный обзор этого от Роберта К. Мартина (из Object Mentor) доступен здесь: OOD Принципы и шаблоны

19.09.2008

6

Парадигма «получение ресурсов - это инициализация» удобна, особенно при написании на C ++ и работе с системные ресурсы (дескрипторы файлов, порты и т. д.).

Ключевым преимуществом этого подхода является то, что однажды созданный объект является «полным» - нет необходимости в двухфазной инициализации и нет возможности частично инициализированных объектов.

19.09.2008

7

слабосвязанная, очень связная.

Композиция превыше наследования.

19.09.2008

8

Доменно-ориентированный дизайн - это обычно хороший принцип, которому нужно следовать.

19.09.2008

9

В основном я увлекаюсь программированием интерфейсов. Я пытаюсь инкапсулировать то, что меняется через кейсы, чтобы избежать дублирования кода и изолировать код на управляемые (для моего мозга) куски. Позже, если мне нужно, я могу довольно легко провести рефакторинг кода.

19.09.2008

10

Принципы SOLID и паттерн Лискова, а также паттерн Единственная ответственность.

19.09.2008
  • Единственная ответственность - это буква S в SOLID, а Лисков - L. :-) 05.11.2008

  • 11

    Я хотел бы добавить ко всему этому наложение слоев, определение слоев в вашем приложении, общую ответственность слоя, то есть способ взаимодействия двух слоев. На этом уровне должны быть разрешены только классы, которые несут такую ​​же ответственность, что и уровень. Это устраняет большой хаос, обеспечивает правильную обработку исключений и гарантирует, что новые разработчики знают, где разместить свой код.

    Другой способ проектирования - разработать настраиваемый класс, создав механизм, в котором конфигурация может быть подключена к вашему классу, вместо того, чтобы переопределять методы в подклассах, определить, какие изменения, посмотреть, можно ли сделать это настраиваемым, и убедиться, что эта функциональность полученный из конфигураций

    12.03.2017

    12

    Обычно я стараюсь вписать класс в один из oo шаблонов проектирования.

    19.09.2008
  • Не вписывайте классы в шаблон проектирования - используйте шаблон, если он подходит. Или ваш код будет раздутым! 03.02.2009
  • Это обычное поведение человека, который только что изучил шаблоны. Не используйте шаблон дизайна только ради него. 12.01.2010
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..