Мне было любопытно, что делают другие магазины в отношении базовых приложений? Я рассматриваю структуру приложения как возможность предоставления дополнительных или расширенных функций для улучшения качества приложений, построенных на нем.Рамки приложений - покупка, сборка или ассимиляция?
Существуют различные рамки, такие как Spring (или Spring.NET) и т. Д. Я считаю, что самая большая проблема заключается в том, что они не являются а-ля-карте. В принципе, у них слишком много функциональности, и, если каждая часть этой функциональности не является лучшей реализацией, скорее всего, вы в конечном итоге используете пэчворк из нескольких фреймворков для выполнения этих задач - вызывая раздувание и путаницу. Это касается, на мой взгляд, бесплатных и коммерческих систем.
Конечно, письмо в значительной степени заново изобретает колесо. Однако, я не думаю, что это без каких-либо заслуг, поскольку он предоставляет наиболее настраиваемый вариант. Однако некоторые вещи слишком велики для разработки, и в этом случае они, по-видимому, плохо реализованы или вообще не реализованы из-за колебаний, связанных с авансовыми затратами на развитие.
Существует большое количество проектов с открытым исходным кодом, которые также обращаются к отдельным частям существующей прикладной среды. Они могут быть приняты или ассимилированы (очевидно, в зависимости от лицензионных соглашений), чтобы помочь в комплексной основе из разных источников.
Мы подошли к ситуации, взглянув на некоторые из самых больших проблем в наших приложениях на всем предприятии и представили список актуальных сквозных проблем и повторяющихся проблем внедрения. В итоге мы придумали гибридное решение, которое частично с открытым исходным кодом, частично основано на существующих вариантах с открытым исходным кодом и частично разработано.
Несколько примеров вещей, которые находятся в нашей инфраструктуре:
- исключений и регистрации событий провайдеров. Простой, единообразный способ, с помощью которого каждое приложение может регистрировать исключения и события одинаковым образом с минимальным усилием кодирования. Из коробки он может подключаться к SQL Server, текстовому файлу, средству просмотра событий и т. Д. Он содержит точки расширяемости для входа в другие источники.
- Применения с переменным назначением. Общий класс, который предоставляет методы расширения, основанные на типе объекта, используя синтаксис, вдохновленный JUnit. Например, чтобы определить, не является ли myObject непустым, мы можем сделать простой Enforce.That (myObject) .IsNotNull(); или определить, является ли он конкретным типом, выполнив простой Enforce.That (myObject) .IsOfType (typeof (Hashtable)); Ошибки принудительного исполнения поднимают соответствующее исключение, уменьшая количество кода и обеспечивая согласованность в реализации.
- Помощники для тестирования модулей. Серия классов, основанная на отражении, которая может автоматически тестировать классы и их свойства. (Вдохновленный Automatic Class Tester от CodePlex), но написанный с нуля. Помогает упростить создание модульных тестов для вещей, которые традиционно трудны или требуют много времени для тестирования.
У нас также есть некоторые другие функции, как есть. Например, мы используем PostSharp для АОП, moq для издевательств, и autofaq для DI.
Просто интересно, что могли сделать другие люди, а что касается адресов вашей инфраструктуры, которые вы не нашли, что вы были удовлетворены? Что касается нашего опыта, мы определенно пожинаем плоды новой структуры и довольствуемся подходом, который мы приняли.
Это очень похоже на то, что мы делаем, и требования, которые у нас есть. Единственное различие заключается в том, что я - «команда» технических арков, обремененных этой задачей. ;-) – 2008-12-07 20:14:14