Thursday, September 8, 2011

Все пропало, гипс снимают!

Бывало ли у вас такое - вы разрабатываете некую концепцию, трудитесь месяц, или два, или полгода, и вдруг выясняется, что все это никуда ни годится? Ну реально никуда! Что работает глючно, или медленно, или логика такая, что без поллитры не разобраться, и что все равно - все равно эта "новая" концепция не решает задач, ради которых была создана.
Примерно то же произошло у меня вчера. Вчера, разумеется, случилась не проблема с концепцией, а проблема с пониманием, что все это псу под хвост...
О чем вообще речь?

Речь идет об CMS, которую я делаю для своего сайта. Проблема в том, что сайт должен быть на 2 языках, и поддерживать статические страницы было бы трудно. Кроме того, мне хотелось применить паттерн mvc, в частности asp.net mvc, ну и вообще сделать так, чтобы можно было быстро, без проблем обновлять данные.
Решение хотелось сделать как можно более общим. Первоначально идея состояла в том, чтобы сделать такую систему, в которую можно добавлять модули (например, опрос или еще что-то) не пересобирая весь проект. Возможно ли такое сделать на asp.net mvc? Не знаю. Мне казалось, что возможно. Однако в процессе разработки концепции выяснилось, что максимум, чего я могу добиться - это добавлять новые компоненты, но проект все придется пересобирать и обновлять. Конечно, есть способы, как это сделать - например, хранить шаблоны страниц (компонентов) в БД, или собирать их на лету, имея список набора полей, но это генерализация, по-моему, сильно усложняет разработку, делает ее уж совсем универсальной, и потому не гибкой. В-общем, мое решение поставленную задачу не выполняло, но я надеялась, что оно выполнит ее в будущем (ага, само, да?).
Вчера же, после некоторого перерыва, я обнаруживаю, что форма фидбэка не работает - ну то есть совсем - обновление страницы происходит, а в контроллер фидбэка захода нет. Почему? Не знаю. Но код, который должен был отправлять данные формы в контроллер, выглядел не просто странно. Он выглядел отвратительно, нелогично, непонятно. Потому что в соответствии с основной концепцией все отправки должны идти через один общий контроллер, который, разобравшись, что к чему, перенаправляет запрос в соответствующий подшаблон. Это позволяет использовать любые адреса (../feedback ../home ..articles/list/5 etc), которые будут обрабатываться в одном месте, одним контроллером, но создает мешанину в итоге, потому что все страницы разные, логика у них разная, и обработка входящих адресов тоже должна вестись по-разному. Иногда это список статей, иногда отдельная статья, или же вообще форма. Форма должна иметь кнопку для обратного вызова, а вызов будет опять идти на тот самый глобальный контроллер, в результате получается черти-что.
Расстройство было жуткое.
Ну да ладно. Опыт все-таки :) Теперь надо быстро переделать веб-сайт, чтобы перенаправление на контроллеры шло привычном образом "конкретный контроллер-конкретное представление".
ЗЫ. Я понимаю, не всем эта тема интересна. Но все же интересно, что используют шароварщики-одиночки для создания своих сайтов?

Update. На самом деле CMS (как она предполагалась в первоначальном виде) пересобирается только если надо добавить новый элемент или тип страницы. Если же просто добавляется новый материал, ничего пересобирать не надо. В новом, более простом варианте каждой новой странице соответствуют новые контроллер-представление, а это значит, без пересборки и обновления сайта ничего не будет работать. Так что, возможно, я вернусь в скором времени к первому варианту, если, конечно, найду время, и если, конечно, продумаю концепцию более основательно (чтобы было все логично и работало быстро).

3 comments:

  1. Не стоит так отчаиваться. А так ли оно вам надо, это добавление модулей без пересборки? У меня большие сомнения в том, что вы будете каждый день добавлять по новому модулю. Сегодня опрос, завтра форум, послезавтра чат и т.д. Советую делать на mvc и не париться.
    Ну а модульная cms вполне себе сойдет и за отдельный нефиговый такой проект :)

    ReplyDelete
  2. Теперь, видите ли, другая проблема. Понимаете, любая cms - это своего рода тормоз. Я где-то прочитала, что правильная cms должна генерировать контент сразу после обновления. Т.е. я так понимаю, что внес изменения - она сгенерила страницу (view-control) в моем случае и положила на сервер (сама). В этом случае все будет ужас до чего кастомным и главное, быстрым. В противном случае cms будет каждый раз генерить некий контент на основании неких шаблонов (так делает большинство cms, по-моему), что вызовет определенные тормоза, и вообще много чего вызовет (обязательную пересборку в случае добавления нового шаблона).

    ReplyDelete
  3. Кто мне объяснит, почему этот чертовый блогспот, когда работает в IE, не дает мне отправлять комменты от собственного эккаунта??? Мне пришлось уйти в ФФ, чтобы это сделать :(

    ReplyDelete