Моя личная любимая конфигурация аналогична предложенной Адамом Кингом, но мне нравится сохранять логическую библиотеку DLL как часть веб-проекта. Я запускаю проект под названием CT Terminal , который следует этому шаблону. Мой проект Terminal.Domain содержит всю логику приложения и просто возвращает объект CommandResult
со свойствами, которые действуют как инструкции, указывающие проекту пользовательского интерфейса, что делать. Пользовательский интерфейс полностью тупой и обрабатывает только то, что ему говорит проект домена.
Теперь, следуя подходу Адама Кинга, я вставлю эту DLL-библиотеку домена в приложение WPF, а затем закодирую пользовательский интерфейс, следуя инструкциям в возвращенном объекте CommandResult
. Однако я предпочитаю другой подход. Я написал пользовательский интерфейс MVC 3 для предоставления JSON API. Этот API может использоваться любым приложением. JSON API был прост, потому что он был в основном оберткой вокруг моего проекта Terminal.Domain CommandResult
object. Возвращаемый JSON будет иметь те же основные свойства. Таким образом, я бы написал приложение WPF для использования этого API, а не DLL. Теперь, если я внесу незначительные изменения во внутреннюю логику приложения, я просто разверну веб-проект на работающем сервере. Все клиенты, использующие API, автоматически получают эту новую логику.
Очевидно, что если вносимые изменения влияют на свойства, возвращаемые из API, то это потребует выпуска нового клиентского кода, но, по крайней мере, для внутренней логики вам не придется это делать.