Слышу, как я публикую часть предложения, которое я взял из моей любимой книги "Архитектура решений Microsoft® .NET для предприятия", и я настоятельно рекомендую прочитать эту книгу, даже если вы не являетесь архитектором программного обеспечения.
Это зависит
Это всегда зависит. Как архитектор, вы никогда ни в чем не уверены. Всегда есть вероятность, что вы что-то упустили. Тем не менее, роль требует принятия решений, поэтому вы должны иметь возможность оценить все варианты и принять обоснованное решение, и делать это быстро, когда требуется решение. Чтобы выиграть время и активировать свои умственные процессы в фоновом режиме, сначала скажите «Это зависит», а затем объясните, почему и от чего зависит ответ. Если вы не уверены, от чего зависит точка, ответ по умолчанию будет «Это зависит от контекста».
Требования господствуют над всеми
Архитектор - это всего лишь одно звено в естественной цепочке актеров в программном проекте. Клиент говорит, что хочет. Если клиент не знает, что он хочет, кто-то будет там, чтобы подсказать ему конкретику. Аналитик формализует то, что хочет клиент. Менеджер проекта готовит основу для формально определенного проекта. Архитектор получает набор требований и разбирает их. Разработчики следуют за архитектором. Администратор базы данных делает все возможное, чтобы база данных эффективно поддерживала приложение. Обратите внимание, что клиент ведет цепочку, и что клиент хочет, это закон. То, что хочет клиент, идет под названием требований. Конечно, лишь немногие клиенты знают, чего они хотят. Так что требования меняются.
Программа для интерфейса
Даже если вы зарабатываете на жизнь реализованным кодом, вы должны использовать интерфейсы везде, где это возможно. Повторите с нами: «Реализация невозможна без интерфейса». Посмотрите вокруг, всегда есть интерфейс, который можно извлечь.
Сохраняйте это простым, но не упрощенным
Вы знаете, ПОЦЕЛУЙ (Keep It Simple, глупый), верно? Это просто наша индивидуальная версия. Простой и лаконичный, как правило, эквивалентен великому и хорошо сделано. Стремитесь к простоте, но дайте себе границу для нижнего предела диапазона. Если вы пойдете ниже этой нижней границы, ваше решение станет упрощенным. И это не очень хорошая вещь.
Наследование связано с полиморфизмом, а не с повторным использованием
Объектно-ориентированное программирование (ООП) научило нас, что мы должны написать класс один раз, использовать его вечно и расширять его по желанию. И это возможно благодаря наследованию. Естественно ли это распространяется на повторное использование классов? Повторное использование является гораздо более тонкой концепцией, чем вы думаете на первый взгляд. Полиморфизм является ключевым аспектом ООП для использования. Полиморфизм означает, что вы можете использовать два унаследованных класса взаимозаменяемо. Как уже говорили другие, «Повторное использование - это хороший побочный эффект». Но повторное использование не должно быть вашей целью, или, другими словами, не используйте класс через наследование просто для повторного использования класса. Лучше написать новый класс, который более точно соответствует потребностям, чем пытаться наследовать существующий класс, который не предназначен для этой работы.
Не DAL? Не трогайте SQL тогда
Повторите с нами: «Разделение интересов. Разделение интересов». Выдвиньте код доступа к данным и данные (например, строки подключения, команды и имена таблиц) в угол. Рано или поздно вам нужно позаботиться о них, но рассматривайте бизнес и логику представления отдельно от постоянства. И, если возможно, делегируйте постоянство специальным инструментам, таким как инструменты Object / Relational Mapper (O / RM).
Первый ремонт
Если бы вы могли выбрать только один атрибут для своего программного обеспечения, что бы это было? Масштабируемость? Безопасность? Спектакль? Тестируемость? Юзабилити? Для нас это было бы ничего из вышеперечисленного. Для нас на первом месте стоит ремонтопригодность. Благодаря удобству обслуживания вы можете в любое время достичь чего-либо еще.
Все вводимые пользователем данные зла
Выдолжен был услышать это уже. Если у пользователей есть возможность сделать что-то не так, они найдут это. О, это звучит как закон Мерфи. Да, ты уже должен был это услышать.
Посмертная оптимизация
Дональд Кнут сказал, что преждевременная оптимизация - корень всего программного зла. Мы идем еще дальше. Не оптимизируйте систему. Вместо этого разработайте его для улучшения и расширения в любое время. Но сосредоточьтесь на чистой оптимизации только тогда, когда система закрыта.
Безопасность и тестируемость разработаны
Если вы серьезно относитесь к системному атрибуту, разработайте его с самого начала. Безопасность и тестируемость не являются исключением из этого правила, и есть стандарт Международной организации по стандартизации (ISO), который специально говорит об этом.
Надеюсь, вам это поможет.