Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: hoestОтветов: 3

Я планирую разработать собственную простую и элегантную структуру веб-приложений на 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#).

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

С уважением

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

web-applicationsweb-frameworks

Ответы

Ответ 1 · рейтинг 4 · Andrew dh

рассматривали ли вы расширение модели 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 и причинить себе много боли;)

Ответ 2 · рейтинг 1 · Phil M

Существует большой объем работы, связанный с разработкой любого фреймворка (веб-сайта или нет). Рассмотрим 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Портал

Ответ 3 · Tebo

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

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

Обновить

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

Другие:

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы