Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Теория программирования > Общие вопросы создания ПО
Перезагрузить страницу Правильная архитектура ПО
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
dest_ru dest_ru вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 13.07.2012
По умолчанию Правильная архитектура ПО - 13.07.2012, 17:02

Здравствуйте. Нужна помощь опытных программистов.
Есть программное обеспечение, уже готовый продукт, но как-то там черт ногу сломает пока разберётся. Хотя вроде комментарии есть, но например все модули (отдельные проекты внутри решения на VS) взаимосвязаны. Вобщем нужен рефакторинг, либо полное переписывание кода.

В чем вопрос: какие можно выделить главные принципы для "правильной" и красивой архитектуры ПО?
Главное, что пока для меня очевидно - каждый модуль должен быть максимально независим от других. Должны использоваться некоторые прослойки (API, или интерфейс) между модулями, чтобы при переносе модуля в другой проект - менять только прослойку и всё.

Но есть однозначное ощущение, что много чего не знаю из того, КАК ДОЛЖНО БЫТЬ.

Хотелось бы услышать какие-то либо советы по тому, как лучше правильно организовать Архитектуру ПО.
Ответить с цитированием
  (#2 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 16.07.2012, 14:57

Гмм. Навряд ли можно вот так просто в одном-двух-трех "принципах" описать "правильную" архитектуру ПО. А она вообще бывает? :-)

Определение:
Архитектура (программного обеспечения) – это совокупность согласованных технических решений, направленная на удовлетворение требований, предъявляемых к программному обеспечению.

Очень часто смешивают понятия "архитектура" и "дизайн". Что же такое "архитектура", и почему это не "дизайн"?

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

Дизайн же — это структура вашей программы. Ее подразбиение на составные части. Ваш подход к решению задачи, которая диктуется текущими требованиями. Хороший дизайн легко понять, и дешево модифицировать. Обыкновенно, локальные правки в хороший дизайн можно вносить не зная всей картины, без риска все сломать. "Дизайн" понимают и как протяженный во время процесс, и как некий артефакт, в который можно ткнуть пальцем (хоть и сложно, но как-то само собой подразумевается, что можно). Цель "дизайна" (проектирования) как процесса — получить понимание того, как мы будем структурировать нашу систему, какова будет ее декомпозиция. Результат — собственно описание декомпозиции, из каких компонент система состоит, и каковы связи между ними.

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

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

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

Вот как-то так.


The difference between theory and practice is that in theory, there is no difference between theory and practice, but in practice, there is.

Последний раз редактировалось Влад; 17.07.2012 в 10:32
Ответить с цитированием
  (#3 (permalink)) Старый
dest_ru dest_ru вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 13.07.2012
По умолчанию 17.07.2012, 12:08

всё правильно говорите
нужно то, что будет основополагающим для долгой разработки, чтобы можно было использовать один и тот же код (или набор кодов) в разных продуктах, имеющих одну общую тему. то есть буквально и железо разное, и требования разные. Меняя один-два компонента только, либо их свойства.

То, что я называл модулями, можно и правда называть компонентами. тогда важна изначально правильно "Декомопозиция" программы, и наверно требований по компонентам.

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

итого всё осталось на круги своя - главное, это Декомпозиция, или то, что я называю "модульностью".
остальное - какие еще договоренности?
а какие бы вы посоветовали?
например, использование паттернов - это к архитектуре или к дизайну?
Ответить с цитированием
  (#4 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 17.07.2012, 13:25

Я правильно понимаю, что в таком контексте для тебя более важно не архитектура, а именно дизайн продукта - разделение на модули (или компоненты) ? Тогда более правильно было бы ставить вопрос "Правильное проектирование ПО", нет?

Главное для тебя и в архитектуре, и в проектировании - это требования (функциональные и нефункциональные) к твоему ПО. Есть такая полезная книга: Вигерс Карл Разработка требований к программному обеспечению.pdf - поищи в Сети, она есть в электронном виде.
Именно требования определяют как архитектуру, так и дизайн ПО. Если говорить о дизайне, то каждый из твоих модулей-компонентов должен отвечать за реализацию определенной группы требований. Причем, архитектура отвечает за то, чтобы система не треснула по швам при добавлении или изменении каких-то требований, и должна быть устойчивой к изменениям требований, а дизайн - за реализацию конкретного набора требований вот прямо здесь и сейчас.

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

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


The difference between theory and practice is that in theory, there is no difference between theory and practice, but in practice, there is.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
современная архитектура процессоров eugrita Процессоры 5 01.12.2011 16:11
архитектура и работа УВВ eugrita Любые вопросы от новичков 2 22.09.2011 21:15
Правильная сборка exe файла (правильная компиляция релиза) MaratZahidyl Visual C++ 3 17.08.2011 09:51
Правильная работа с переменными ROma666 C++ Builder 11 11.11.2009 21:47
Что есть архитектура озу? Nigelhorst Память 6 09.03.2009 19:51
Архитектура Nehalem и процессоры Intel Core i7 Валерий Процессоры 0 21.10.2008 19:54
Правильная настройка брэндмауэра Paul Pierce Софт и программы 1 20.05.2007 20:41
Правильная установка Borland C++ Lиssёноk Вопросы начинающих программистов 13 17.02.2007 17:47
Правильная структура данных alex-chin Prolog 7 13.09.2006 15:31
Архитектура сетевой подсистемы Dian Мысли вслух 3 23.08.2005 04:20
Архитектура PocketPC [Harald] Железо. Написание драйверов 2 28.12.2004 18:14
Архитектура Интернет-приложений M-Angel PHP 4 08.01.2004 16:14



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов