суббота, 18 июня 2011 г.

Идея

Практика создания простого приложения.

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

1. Проверить свои силы в разных областях программирования
2. Изучить новые технологии
3. Встрясти начинающий заплывать ленью мозг


Вот таккая иотивация. Я, собственно, и не надеюсь, что кто т обудет читать этот блог, потому буду просто кратко записывать сюда свои мысли и описывать процесс создания, чтобы потом показывать внукам :)

Итак, приступим.

Идея.

Я хочу написать очень простое приложение, но написать его "правильно". То есть используюя самые современные тенденции в разработке. Сам я уже 3 года занимаюсь разработкой под ASP.NET - поэтому приложение должно быть десктопным, чтобы не касалось моей текущей деятельности. Пробежав по книгам, что у меня накопились за время учебы, мне пришла в голову мысль - "а напишу ка я свой блокнот". А что, приложение простое дальше некуда. Итак, мой блокнот должен удовлетворять следующим требованиям:

1. Хочу модульности. То есть чтобы можно было писать плагины для блокнота.
2. Посветка синтаксиса, если контент это позволяет. Очень удобно, между прочим. Вот я пользуюсь Notepad++ - заметил в нем такую фишку - он не распознаёт текст по содержимому, он подсвечивает синтаксис только если расширение открываемого файла соответствует.
3. Хочу автоматическго обновления. Думаю, это реально сделать.
4. Хочу хорошо спроектированную систему.
5. Хочу, чтобы блокнот запоминал контент открываемых файлов, поддерживал Undo и Redo, печать документа и даже версионность. Версионность - это означает, что при изменении документа, его потом можно было бы открыть и откатить, например. Или поглядеть историю изменений.
6. Хочу синхранизацию версий между разными компьютерами сети.

Ограничения.

Так как приложение я пишу для себя, то будем считать, что:

1. На клиенте установлен последний фреймворк
2. Клиент не будет открывать файлы больше 1 мб
3. У клиента нет особых требований по размеру используемой памяти/быстродействию. Главное ,чтобы совсем не тупило.

Теперь определимся с технологиями.

1. Для интерфейса я выбрал технологию WPF (http://msdn.microsoft.com/ru-ru/library/ms754130.aspx). Очень перспективная, на мой взгляд.
2. Для модульности я хочу использовать MEF (http://archive.msdn.microsoft.com/mef).
3. Автоматическре обновление. Это я ещё не решил. Но в голове крутится "Click onceeee" :)
4. Обязательное использование паттернов проектирования там, где это оправдано
5. Печать документа.. это я полагаю сделаю средствами WPF или встроенными виндос средствами
6. Версионность. Хочу хранить разные версии файлов в базе данных. Пока что пусть это будет SQL CE.
7. Синхронизация. Для этого я постараюсь найти встроенные решения, ну или wcf на худой конец.

И напоследок. Не уверен, что этот проект закончится быстро, ввиду моей занятости. Однако я не теряю оптимизма и буду потихоньку, не спеша, развивать проект. Опыт ещё никому не повредил, а если ещё и чт то полезное получится - то будет совсем здорово.

6 комментариев:

  1. Про версионность. Как можно идентифицировать потом в базе что за файл ты открыл? Как будешь искать его версии?

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

    ОтветитьУдалить
  3. Полные пути файлов могут совпадать в разные промежутки времени. "Новый текстовый документ.txt" на рабочем столе например. Твоя система будет считать это одним файлом, но с разными версиями. А на самом деле файлы разные, как и содержимое.

    ОтветитьУдалить
  4. я и не рассчитываю вести учет изменений фалов. я рассчитываю просто учет информации о том, что когда и где пользователь сохранял. Я ж написал - хранить разные версии файлов и всего то. Что то наподобие заметок. Можно ещё к таким сохранениям комментарии прилепить, теги, - и будет прямо система заметок.

    ОтветитьУдалить
  5. Ты же сам написал, что хочешь, чтобы твоя система умела откатывать назад изменения.

    ОтветитьУдалить
  6. ну да. но блокнот - это не та система, которая сможет определить, что документ изменен сторонней программой или удален и заменен новым. Я написал откатить в том смысле, что увидеть все файлы, что сохранялись в данной папке под именем открытого документа и иметь возможность заменить текущий документ одной из версий этих файлов.

    ОтветитьУдалить