Изучая архитектуру программного обеспечения и шаблоны проектирования, я заметил, что в большинстве случаев в объяснении подразумеваются некоторые языковые особенности и особенности проектирования.
Например, практически любая статья или книга, иллюстрирующая идеи с использованием классов и интерфейсов. Все, что можно легко найти в этой теме, будет включать объекты и концепции ООП.
Что если язык, на котором написана система, вообще не имеет таких понятий? Например, что если я использую Python или Node, которые динамически типизированы и не имеют понятия интерфейса? Что если я использую TypeScript, где интерфейс - это эфемерная конструкция, которой нет во время выполнения? Что если я пытаюсь использовать функциональное программирование? Должен ли я игнорировать, например, SOLID и искать другие концепции, подходящие для моего языка?
Если да, то что это? К сожалению, все хорошо принятые парадигмы (насколько мне известно) так или иначе относятся к концепциям и типам ООП. Если нет, каким правилам следует следовать при адаптации общих принципов архитектуры и дизайна к моему конкретному языку и сценарию использования?
Как бы вы описали зависимость между архитектурой и языком?
источник
Ответы:
Архитектура программного обеспечения очень похожа на архитектуру дома или моста. Мост должен выдерживать вес самого себя и транспортных средств, которые проезжают по нему, или людей, которые идут по нему. Он должен противостоять погоде. Материалы, которые вы используете для его изготовления, должны быть прочными и относительно легкими.
Есть много материалов, которые вы можете использовать, чтобы построить дом. Вы можете использовать кирпич или штукатурку. Вы можете использовать деревянные балки или металлические. Каждый материал имеет свои особенности, с точки зрения веса, прочности и так далее. Все эти характеристики влияют на архитектуру.
Точно так же используемый вами язык программирования влияет на то, как вы строите свою архитектуру. Ваша архитектура будет выглядеть по-другому в языке программирования, который имеет классы, подобные C ++, чем в языке программирования, который не имеет, как C.
Принципы SOLID в основном касаются объектно-ориентированных языков (т.е. языков, имеющих классы).
источник
Архитектура зависит от возможностей для достижения своих целей. Выбор языка может ограничивать возможности. Любой полный язык Тьюринга имеет возможность выполнить любую задачу программирования. После этого пункта речь идет о том, насколько читабельным является язык, позволяющий найти решение.
Многие схемы архитектуры программного обеспечения просят вас удалить все знания о выборе технологий из основных бизнес-правил домена. Единственный технический выбор, который вы никогда не сможете удалить из ядра, - это язык, на котором вы хотите выразить это.
Когда книги по архитектуре рассказывают вам о своих целях, язык не имеет значения, если он способен достичь цели. Когда в книгах рассказывается, как достичь этих целей, язык начинает иметь значение.
источник
У архитектуры как термина есть действительно определенное значение, которое очень связано с архитектурой в физическом мире, и в его основе лежит искусство и практика создания вещей, о том, как вещи сделаны и соединены. Таким образом, когда архитектура работает хорошо, я думаю, что язык очень тесно связан с архитектурой, так же как хорошо спроектированное здание должно быть тесно связано с материалом, из которого оно построено.
В программном обеспечении архитектурный выбор должен быть сделан таким образом, который соответствует свойствам языка. Если вы строите систему с объектно-ориентированным языком, то я ожидаю, что архитектура системы также будет объектно-ориентированной. Если вы строите систему с функциональным языком, то я ожидаю, что архитектура этой системы также будет функциональной.
Есть смысл?
источник
Для начала я бы сказал, что даже язык, на котором вы думаете, оказывает глубокое влияние на то, что вы можете себе представить. Есть причина, по которой PASCAL был создан Никлаусом Виртом и Си Брайаном Керниганом и Деннисом Ричи.
На более высоком уровне способность выражать определенные концепции (и отсутствие других) будет направлять вашу мысль и заставлять вас приходить к определенным решениям, которые не обязательно будут такими же, как у другого человека, с другим опытом.
Наконец, все упомянутые вами концепции могут быть реализованы на любом языке общего назначения. Просто у них может не быть синтаксической поддержки, а реализация может быть громоздкой. Вы можете написать объектно-ориентированный ассемблерный код x86, если вы достаточно привержены (или достаточно безумны), как вы могли бы это сделать с C. На самом деле, первыми реализациями C ++ были препроцессоры, которые скомпилировали ваш код C ++ в C (и искалеченные имена символов сделали отладка намного веселее).
источник