Разработать фреймворк веб-приложения на C#

Я планирую разработать собственную простую и элегантную структуру веб-приложений на C# 3.5. У меня есть некоторые идеи, но еще не лучшая практика, как это должно быть реализовано. Может быть, вы можете помочь?

Мои идеи:

  • Это библиотека С# (DLL)
  • Он должен использовать XSLT в качестве языка шаблонов, поэтому XML должен быть выходом моего уровня данных/модели.
  • Он должен подключаться к различным базам данных, таким как MySQL en SQL Server и ODBC.
  • Это должна быть командная база, такая как шаблон проектирования команд, поэтому я могу опубликовать команду с некоторыми параметрами, сгруппированными в эту команду, и делать «вещи»
  • Все команды и действия с БД из 1 поста нужно в 1 транзакцию, чтобы можно было все откатить
  • Должна быть модель безопасности/авторизации (что хорошо?)
  • Он должен иметь какое-то разрешение URL-адреса, например, /a/b/c разрешается в /?id=33.
  • Он должен быть подключаемым, поэтому, когда я создаю веб-приложение для кого-то с особыми потребностями, мне не нужно изменять мою базовую библиотеку Engine.
  • Он должен иметь методы кэширования и/или сжатия внутри
  • Он должен быть быстрым, потокобезопасным и производительным.
  • Он должен иметь журнал отладки
  • Было бы неплохо иметь какие-то динамические сценарии, такие как IronPython, реализованные на уровне данных/модели для динамического написания сценариев моего вывода в XSLT, чтобы можно было быстро вносить коррективы, не входя в Visual Studio и не настраивая мою DLL.

У вас есть идеи, как лучше всего начать настройку такой структуры? Или уже есть такой фреймворк в C#?

Это одна маленькая идея, когда у вас есть таблицы "Клиент" и "Адрес", и вы хотите разместить html-форму для добавления записи в базу данных и отправить его по почте, вам нужно разместить эти поля в 1 постакции:

Customer.ACTION = add
Customer.Name = "John Smith"
Customer.Email = "[email protected]"

Address.ACTION = add
Address.CustomerId = #Customer.ResultId#
Address.Street = "Mainstreet"
Address.Number = "1"

Mail.ACTION = send
Mail.AFTER = Customer
Mail.To = #Customer.Email#
Mail.From = "[email protected]"
Mail.Subject = "Welcome"
Mail.Body = "Welcome new customer!"

Движок получает сообщение и путем Reflection собирает класс для нужной ему команды, в данном случае DatabaseCommand и MailCommand, и запускает ее. Видите ли, я хочу использовать какую-то очередь с сортировкой. В этом случае Customer-команда должна быть первой, после нее Mail (см. Mail.AFTER) и/или Address (см. зависимость #Customer.ResultId#).

Итак, что вы думаете об этом проекте?

С уважением


person hoest    schedule 14.11.2009    source источник
comment
Вау, звучит как большой зверь, которого вы строите. Изучили ли вы существующую платформу .NET с открытым исходным кодом, на которой вы можете работать вместо того, чтобы создавать с нуля и подключать сторонние компоненты?   -  person o.k.w    schedule 14.11.2009
comment
Еще нет. Есть ли еще хорошие альтернативы? Это лишь некоторые идеи, которыми я хотел бы поделиться! :)   -  person hoest    schedule 14.11.2009
comment
Элегантность и XML на самом деле несовместимы...   -  person hasen    schedule 14.11.2009
comment
Как вы думаете, почему они не идут вместе?   -  person hoest    schedule 14.11.2009
comment
Все, что связано с XSLT, звучит как кошмар, который ждет своего часа. Но я предвзят, мне действительно пришлось использовать XSLT.   -  person Yann Schwartz    schedule 14.11.2009
comment
Я согласен с Яном: XSLT является многословным (поскольку это XML) и запутанным (из-за рекурсии) по сравнению, скажем, с LINQ-to-XML в C#. Вы можете ограничить свою аудиторию, выбрав этот путь.   -  person TrueWill    schedule 14.11.2009


Ответы (3)


рассматривали ли вы расширение модели MVC вместо того, чтобы начинать с нуля?

Не совсем уверен, что вы пытаетесь сделать с xslt - вы хотели отправить его в xml и преобразовать обратно в html? если это так, вы можете попробовать наследовать ActionResult и выполнить преобразование, используя стандартные библиотеки .NET.

этот подход будет поддерживать mysql, сервер sql, oracle и т. д. в соответствии с библиотеками .NET, имеет безопасность/аутентификацию, может использовать настраиваемые маршруты для выполнения сопоставлений /a/b/c -> /?id=33, основан на OO и может быть подключаемым, кеширование может быть выполнено, поскольку его основа - ASP.NET, а сжатие GZIP/DEFLATE может быть включено в IIS.

применение xslt к слою данных/модели не похоже на подходящее место для этого - я бы поместил это намного ближе к слою представления.

что касается ваших данных POST, вы можете использовать стандартный способ MVC для обработки этого глагола, иначе это звучит так, как будто вам нужна архитектура на основе RESTful http://en.wikipedia.org/wiki/Representational_State_Transfer

конечно, вы всегда можете просто унаследовать IHttpHandler и причинить себе много боли;)

person Andrew dh    schedule 14.11.2009
comment
Вы имеете в виду ASP.NET MVC (asp.net/mVC)? Мне нравится XSLT, поэтому я хочу использовать его в качестве преобразования в XHTML. Тогда я могу делать все, что захочу, реализовать хороший строгий XHTML. - person hoest; 14.11.2009
comment
Я реализовал некоторые из моих должно-иметь. Но попытаюсь придумать, какие шаблоны и вывод данных я буду использовать. - person hoest; 18.11.2009
comment
проверьте библиотеку NHaml .net. очень приятно работать с шаблоном POV - person Andrew dh; 09.12.2009

Существует большой объем работы, связанный с разработкой любого фреймворка (веб-сайта или нет). Рассмотрим 2 популярных веб-фреймворка «Rails» для Ruby и «Django» для Python. Они построены командой и довольно обширны. Вы можете построить один, но это определенно займет много времени.

Я знаю не так много веб-фреймворков для .NET, однако следует отметить следующее (хотя они не обязательно все должны быть «веб-фреймворками»):

  1. ASP.NET MVC создан по образцу «Rails».
  2. Проект подтекста
  3. SpringFramework.NET/NHibernate.NET
  4. NetTiers
  5. Замок Проект
  6. Various web / frameworks on CodePlex
    • CommonLibrary.NET
    • Катарсис
    • MojoПортал
person Phil M    schedule 28.12.2009

для разрешения URL я недавно реализовал его в своей существующей структуре. Он использовал механизм маршрутизации ASP.Net.

Я мог бы отправить вам модуль с примерами кода о том, как его использовать.

Обновить

Вот чем реально эта помощь:

Другие:

person Tebo    schedule 14.11.2009