пятница, 27 июня 2008 г.

Техническая реализация.

Сервер
Язык разработки: C#.
Платформа: ASP.NET.
Модель обработки данных: MS MVC. Реализация концепции Model-View-Controller от MS для ASP. На начало проекта есть только Preview 3.
База данных:MySql.
ORM: NHibernate.
Аспектное программирование.PostSharp.

Клиент
В качестве клиента выступает браузер Mozilla Firefox и Internet Explorer. Какие версии - не знаю. Должно работать на моих версиях :)))
Клиентский код пишется на JavaScript.
В браузере должны быть включены JavaScript и Cookie. С отключенными JavaScript и Cookie сайт работать не обязан (да и не будет, наверное).
API работы с картографической информацией - API от Google.
В качестве упрощения написания кросс-браузерности и, вообще, упрощения написания скриптов на уровне клиента, используется jQuery.

Прочие "штуки".
В качестве среды разработки - VisualStudio 2008 Pro (у меня лицензионная версия! Мне ее на выставке подарили :))) Надо будет еще узнать что там за лицензия и могу ли я использовать ее в качестве среды разработки :)
В качестве вспомогательных утилит - Шаблонизатор (TemplateGenerator). Автор: Дорош Влад. Почту не знаю, ничего не знаю и вообще он скрытный человек :)

Некоторые разъяснения:

Требования к языку: Жесткий, типизированный язык. Большая часть ошибок должны определяться на этапе компиляции. Удобный в использовании. И вообще, был выбран C# потому что он мне нравиться и удовлетворяет этим требованиям. Соответственно, в качестве платформы идет ASP.NET 3.5.

В качестве шаблона взаимодействия клиента с сайтом был выбран подход MVC (Model View Controller).
Данная модель позволяет легко декомпозировать взаимодействие с пользователем, сервером, базой. Легко позволяет разделить обработку запросов от клиентов, представлением данных и хранением данных.

Дальше, база данных определяется хостингом. Можно было писать на MSSQL, но нормальных дешевых хостингов с базой я не нашел... А с mysql нашел. Да и потом модель перегнать на другую базу, надеюсь, больших проблем не будет.

Применение и выбор ORM... Ну... банально.... свой "велосипед" писать не захотел. а других популярных ORM'ов не знаю :) Да и широкоиспользуемые компоненты посмотреть стоит :)

Ща рисунок нарисую, что получается. Напишу сразу все в кучу, потому что, (кто меня знает подтвердят) я - ленив!



Т.е. запрос от клиента попадает в контроллер, контроллер принимает решение о дальнейшей обработке (проверяет безопасность, осуществляет редирект и т.д.). При необходимости использует объектную модель системы. После обработки, передает данные на формирование ответа пользователю (представление). Этот блок осуществляет форматирование данных и отправку пользователю. Там нет логики. Единственная часть логики, которая ушла в этот блок, это решение о "вставлять или нет кусок страницы, в зависимости от безопасности". Так же может использует модель в качестве источника данных.

При формировании модели, она должна где-то храниться. Это - уровень БД.
Для отображения данных объектной модели на БД, использовался NHibernate.
НО я уже слышал несколько не очень лестных отзывов о нем, поэтому выделил в отдельный уровень (практически DAL). Все обращение к БД идет через этот DAL.
И уровень БД - mysql. Постараюсь сделать базы заменяемыми.


Дальше, самая загадочная штука. Аспектное программирование. Я использовал PostSharp.
На аспектах попытаюсь организовать основную часть security.
Аспекнтное программирование в C# подразумевает, что при помощи атрибута метода, мы можем вклиниться в выполнение этого метода.
Таким образом, я навесил на все методы, которые требуют обработку безопасности, этими атрибутами и, если безопасность не проходит, я перекидываю пользователя на ошибку.
Это позволяет единообразно обрабатывать обращения пользователя и не загромождает код.


Использование "шаблонизатора". Вообще, код модели и Nhibernate-proxy очень похож (в рамках свойств и некоторых методов). Поэтому, что б не копировать по 10 раз код, были написаны некоторые шаблончики, которые позволяют один раз описать объект. Затем, по описанию, сформировать несколько файлов.
На данный момент, для описания сущности, мне надо сформировать следующие файлы:
  • C#-класс модели

  • C#-класс-прокси для Nhibernate

  • xml-описание меппинга таблиц БД на класс-прокси Nhibernate


  • Думаю над тем, что б написать генерацию некого "стандартного" представления... т.е. asp.net-html странички... но это пока все только мысли...
    Возможно, пойду по еще одному пути... напишу некий свой кодегенератор в качестве плагина для VS. Но это - тоже просто мысли... ленив я :)

    Все. Мне надоело на сегодня писать. Ждите user-story в моем понимании! :)

    Комментариев нет: