Как мне спланировать архитектуру для перезаписи системы?

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

Позвольте мне объяснить старую систему:
1. База данных SQL Server (не нормализованная)
2. Приложение Palm (для ввода данных в базу данных)
3. Веб-служба 1 ( Приложение Palm отправляет данные для ввода в базу данных)
4. Веб-приложение (для ввода данных в базу данных) - я создал это
5. Веб-служба 2 (Веб-приложение 1 отправляет данные для ввода в базу данных) - Я создал этот
6. Веб-сайт (для прямого доступа к данным CRUD и печати отчетов)

Позвольте мне объяснить мою концепцию архитектуры для новой системы:
1. Решение для веб-приложений с пользовательским интерфейсом - заменяет старый веб-сайт.
2. Решение для веб-приложений с пользовательским интерфейсом - заменяет старое веб-приложение и приложение для Palm.
3. Решение для веб-службы (с использованием WCF) - заменяет старую веб-службу 1 и веб-службу 2.
4. Решение для бизнес-объектов - здесь будут размещены бизнес-объекты, вызовы кода в Решение для доступа к данным и вызовы кода в Решение Business Logic.
5. Решение Business Logic - Здесь будут размещены бизнес-правила.
6. Решение для доступа к данным - здесь будет размещен код для получения данных в / из базы данных.
7. Передача данных Объектное решение - используется для передачи информации следующим образом: 7.1. Решения пользовательского интерфейса в / из решения веб-службы.
7.2. Решение веб-службы в / из решения бизнес-объектов.
7.3. Решение бизнес-объекта в / из решения для доступа к данным.

Позвольте мне объяснить свои лучшие практические концепции для новой системы:
1. Модульные тесты для решения веб-службы.
2. Модульные тесты для Решения Business Object.
3. Модульные тесты для Business Logic.
4. Модульные тесты для Решения доступа к данным.
5. Принцип единой ответственности
6. Принцип открытия / закрытия
7. Принцип замещения Лискова
8 . Принцип разделения интерфейса
9. Принцип инверсии зависимостей

Новые цели системы
Я надеюсь, что я смогу сгенерировать чистый код, который будет включать в себя модульные тесты, обернутые вокруг него, с интеграционными тестами, обернутыми вокруг всей системы, при изучении шаблонов проектирования, WCF, TDD, Rhino Mocks , Expression Blend 3, Visual Studio 2010 и TFS 2010. Я также хотел бы использовать эту систему в качестве справочника для изучения новых языков в будущем, таких как Rails.

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

Спасибо за уделенное время!


person Michael Wheeler    schedule 06.01.2010    source источник


Ответы (4)


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

person Doc Brown    schedule 06.01.2010

Я бы нашел еще лучший «обучающий» (и более реалистичный) проект: используйте систему и реорганизуйте ее, чтобы улучшить качество. Часто это лучший опыт обучения, поскольку всегда начинается с нуля.

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

person manuel aldana    schedule 09.01.2010

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

Сказав это, вы в основном описали трехуровневое многоуровневое приложение, что обычно является разумным подходом. Однако я бы не стал разбивать его на такое количество решений (у меня были бы решения уровня UI, Business и Data с отдельными проектами внутри них).

Я не уверен, зачем вам «Решение для передачи данных» - зачем вам отдельная библиотека для обработки передачи данных между слоями? Они сами должны иметь возможность звонить от одного к другому вниз по стеку.

person Paolo    schedule 06.01.2010
comment
Идея решения передачи данных заключается в том, что решение для доступа к данным (DAS) не должно знать, что такое бизнес-объекты. Решение Business Object Solution (BOS) запрашивает DAS у GetUsers, и DAS возвращает общий список пользователей из базы данных, который затем BOS сопоставляет бизнес-объекту Users. Может я ошибаюсь. - person Michael Wheeler; 07.01.2010

Во-первых, я считаю, что ваш подход - это круто. У вас есть время и бюджет? Работа деловых людей, вероятно, состоит в том, чтобы сказать вам: вы не такие. Теперь все становится немного серьезнее: вам нужно сделать систему шаг за шагом более чистой с точки зрения архитектуры. Убедите (я надеюсь, что вы не одиноки) членов команды, что эти вещи облегчат их жизнь. Единичные тесты, написанные до изменений, помогут вам удовлетворить бизнес-требования. Ваш план отличный, но я боюсь, что вы не сможете его реализовать с большим взрывом! Насколько я знаю, это происходит всего через 10 ^ 100 лет. Сделайте хорошую работу!

person stacker    schedule 06.01.2010