Призма с ASP.NET - PullRequest
       3

Призма с ASP.NET

1 голос
/ 06 декабря 2010

Моя компания изучает ASP.NET и Prism.Нам интересно, сколько повторного использования кода мы можем получить между двумя вариантами.

На мой взгляд, у Prism есть эти "части":

  • Shell (Bootstrapper и подобные)
  • Модули
  • Службы (не веб-службы)
  • Регионы
  • Слабосвязанные события (IEventAggregator)
  • Unity (хотя на самом деле это автономный)product)

Когда я смотрю на это, единственная часть, которая обязательно должна использоваться с Silverlight / WPF, - это Регионы.

Оболочка может быть немного хитрой, но я думаю, что это можно сделать в приложении ASP.NET.Я также считаю, что Модули (модули, не входящие в регион) также должны быть выполнимыми.Использовать IEventAggregator и Unity должно быть легко.

Единственная проблема, с которой я столкнулся, заключается в том, что я не очень разбираюсь в программировании на ASP.NET, поэтому не уверен в своих предположениях.Я хотел бы получить обратную связь от кого-то, кто знаком с Prism и ASP.NET, прежде чем обсуждение этого вопроса пойдет полным ходом (здесь, в моей компании).

По сути, я хочу сделать модули Prism, которыезапустит веб-сервисы и бизнес-логику.Затем я хочу взять эти модули и (повторно) использовать их в приложениях ASP.NET и модулях WPF / Silverlight Prism (через регионы).

Я планирую сложный путь, пытаясь объединить эти две системы?

Ответы [ 4 ]

7 голосов
/ 07 декабря 2010

Проблема, с которой вы столкнетесь, заключается в разных стилях жизни клиентских приложений и веб-приложений.

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

Клиентские приложения, с другой стороны, запускаются, настраивают свою среду, а затем сохраняют все в памяти. Кроме того, экземпляр клиентского приложения будет иметь одного пользователя, а не многих. Оболочка и EventAggregator, в частности, полагаются на все, что остается в памяти, даже на запросы, и не различают, кто работает (потому что в этом мире есть только один).

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

2 голосов
/ 07 декабря 2010

Если повторное использование кода представляет собой большую проблему (что и должно быть), я бы посмотрел требования к времени жизни вашего проекта.Вам нужен этот код, чтобы выжить несколько лет, 5 лет, 10 лет?Больше?Очевидно, что большинство крупных проектов хотят, чтобы их код выживал как можно дольше с минимальным техническим обслуживанием (или переписыванием).

Причина, по которой я это поднимаю, состоит в том, что если вы пишете свои модули кода с использованием Prism или ASP.NETзатем вы привязываете свой (потенциально) повторно используемый код к этой конкретной технологии, которая может использоваться или не использоваться в течение 5 лет.Это связывает ваш долгосрочный код с относительно краткосрочной технологией.Что произойдет через несколько лет, когда выйдет «следующая важная вещь», и вы захотите перенести в нее свой проект?Если вы подключены к Prism или к текущему ASP.NET, вам может показаться финансово сложным / невозможным переключение технологий.

Вам лучше абстрагировать логику приложения и перейти на технологию верхнего уровня.-агностическая структура, которая может быть связана с Prism и / или ASP.NET.Эта идея развязки является одной из главных причин того, что контейнеры IoC / DI (такие как Unity) стали так популярны в последнее время.Это также значительно упрощает модульное тестирование.

По сути, используя некоторую прикладную инфраструктуру (например, N-уровень ), вы инкапсулируете свою бизнес-логику и доступ к данным, абстрагируяПользовательский интерфейс таким образом, что его можно использовать повторно. Model-View-Presenter также демонстрирует абстрагирование вашего пользовательского интерфейса для максимального повторного использования и модульного тестирования.

N-уровневая инфраструктура приложений также сияет, когда вы смотрите на распределенные вычисления - что происходит, когда выхотите запустить приложение Prism на компьютере клиента, но хотите разместить данные своего приложения (например, базу данных SQL Server) на сервере?Если компьютер вашего клиента находится в вашей сети, это нормально - вы можете передать ему строку подключения к серверу, без проблем.Но если вы планируете получить доступ к своим данным через Интернет, то вам необходимо абстрагировать уровень данных вашего приложения и предоставить методы (безопасного) извлечения данных через Интернет.

1 голос
/ 07 декабря 2010

Я думаю, ты идешь в мир боли. Я копался в коде Prism, и он не очень красивый и тесно связан с WPF / Silverlight. Модели очень разные, и мысль о совместном использовании кода звучит великолепно, но держу пари, что это будет практически невозможно.

1 голос
/ 07 декабря 2010

Я проголосовал за ответ Криса, потому что он на 100% правильный с vanilla asp.net.Однако, проявив немного творческого подхода, вы сможете использовать Knockoutjs , чтобы приблизиться к своей цели.

...