Что значит «монолитный»? - PullRequest
15 голосов
/ 05 июля 2010

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

Спасибо за помощь.

Редактировать: Мне нравятся умные ответы, но я явно имею в виду "монолитный" в контексте программного обеспечения. Я знаю о монолитах, мегалитах, дольменах и всех связанных с камнем контекстах. Ну и дела, у меня их достаточно в моей стране ...

Ответы [ 6 ]

13 голосов
/ 05 июля 2010

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

Если вы прочитали The Pragmatic Programmer, что я настоятельно рекомендую, вы можете определить монолитный класс как антишаблон, который идет против почти всего из этой книги.

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

  1. JOGL - привязки Java для OpenGL. Это может быть спорным, и с полным основанием.
  2. Большинство академических проектов - по понятным причинам.

Если вы начали программировать самостоятельно, а не присоединились к команде, скорее всего, вы можете открыть один из ваших первых проектов, и будет класс, который будет монолитным.

11 голосов
/ 05 июля 2010

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

.
6 голосов
/ 05 июля 2010

«Монолитный» - это термин, который использовался для успешного запуска программного обеспечения . Эта ссылка раскрывает допущения, присущие данному термину, и их ограниченную полезность.

Основное допущение состоит в том, что система работает лучше, если она построена из программных компонентов, каждый из которых имеет индивидуальную, четко определенную задачу. Интуитивно это кажется правильным. Если каждый компонент работает, вся система должна работать, верно?

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

Теперь Linux (продолжая на связанном примере) в действительности не является монолитным. Он имеет модульное пользовательское пространство поверх монолитного ядра, пользовательское пространство, которое поставляется со многими отдельными утилитами. За исключением случаев, когда это не так.

1 голос
/ 31 января 2019

Монолитная архитектура - это модель структуры программного обеспечения, которая создается как единое целое, где все инструменты Rails (ActionMailer, ActiveJob, ActionCable и т. Д.) Могут быть собраны вместе с кодом, который применяются этими инструментами.Инструменты не связаны друг с другом, но также не являются автономными.

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

Давайте вспомним, что такое Ruby on Rails, что он может предложить, его плюсы и минусы.Его главное преимущество в том, что с ним легко работать.

Если вы напишите rails new , вы сразу же получите новое приложение, а затем сможете создать любой REST API, какой захотите, и использовать.Помощники и генераторы Rails, что делает разработку еще проще.

Если вам нужно отправлять электронные письма в приложении Rails, используйте Rails ActionMailer.Когда вам нужно выполнить сложную обработку, ActiveJob поможет вам.С Rails 5 вы также сможете использовать веб-сокеты из коробки.Таким образом, будет легко создавать чаты или делать приложение более интерактивным.

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

0 голосов
/ 27 июня 2016

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

PRO:

  • Все в одном месте, и поэтому легко найти
  • Может быть проще, если учесть меньше отношений (также может быть более сложным, см. Минусы)

МИНУСЫ:

  • Со временем, по мере добавления функциональности, сложность системы может экспоненциально возрастать, и новые функции крайне сложно или невозможно реализовать
  • Может затруднить работу нескольких разработчиков, например, файлы EDMX Entity Framework содержат всю базу данных в одном файле, что может быть чрезвычайно затруднительным для работы нескольких разработчиков.
  • Снижение возможности повторного использования, по определению он не имеет меньших компонентов, которые затем могут быть повторно использованы и переназначены для решения других проблем, если только полная копия кода не сделана, а затем не изменена.
0 голосов
/ 22 мая 2015

Это означает что-то противоположное модульному. Модульное приложение может иметь заменяемые части, называемые модулями, без необходимости замены всего приложения. Принимая во внимание, что монолитное приложение после ремонта или модернизации детали должно быть полностью заменено.

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

Таким образом, в контексте монолитного класса все его функции являются автономными, и если вы хотите добавить или изменить функцию в классе, вам потребуется изменить / добавить код в классе и перекомпилировать его. И наоборот, модульный класс предоставляет доступ к функциональности, которая реализована извне. Например, класс «Калькулятор» может использовать отдельный класс «Добавить» для фактического добавления чисел; вызвать функцию «Умножить» из отдельной библиотеки; или даже вызвать функцию «Амортизация» из веб-службы. Пока каждая из этих функциональных частей может быть изменена извне класса, она является модульной.

...