Автор Гілка: Розробка модульних систем  (Прочитано 2045 раз)

Відсутній miwa

  • Літератор
  • ******
  • дописів: 1111
  • Карма: +0/-0
Є самописна клієнт-серверна система обліку, котра працює кілька років у двох десятках магазинів в трьох містах. Чим далі тим більше до неї зростають вимоги стосовно модульності і масштабування. Зокрема, те що потрібно кавярні, ніяк не потрібне ветеринарній клініці і їхні сукупні потреби абсолютно не підходять будівельному супермаркету. Плюс не завжди виходить знайти ідентичне касове обладнання. Плюс різні ОС. Плюс ще багато всякого.

А тому.

Хочеться реалізувати відкриту модульну систему, в котру модулі будуть дописуватись по мірі потреби. В ідеалі - з повністю взаємозамінними компонентами, в тому числі ядром і (якщо потрібно) використовуваною СУБД.

Прошу вказати на існуючі рішення і документацію - щоб оцінити, чи варто за таке взагалі братись і з чого починати, якщо братись таки варто. Якщо конкретніше - цікавить розробка модульних клієнт-серверних крос-платформних (як варіант - веб-орієнтованих, якщо в них можна працювати з обладнанням на боці клієнта) систем.

Деталі
« Змінено: 2009-08-20 00:04:33 від miwa »
Читайте документацію - вона кермує.

Відсутній mux

  • Новачок
  • *
  • дописів: 11
  • Карма: +0/-0
Re: Розробка модульних систем
« Відповідей #1 : 2009-09-02 11:57:46 »
Брав участь у розробці подібних речей на Java.

Деякі думки:
1) Чи можлива централізація? Тобто чи всі клієнти та сервери є географічно розкидані? Якщо так, то це дещо ускладнює підтримку, але спрощує архітектуру. Якщо ні - це дещо ускладнює архітектуру.
2) Якщо під "працювати з обладнанням" не малось на увазі фізичну взаємодію з пристроями, то однозначно Веб варіант
3)Щодо інструменту, рекомендую PHP, але обов'язково з використанням якогось фреймворку. Наприклад Zend Framework. Він сам по собі є модульним, і на його прикладі можна побачити як реалізовувати підходи до модульності.
4) Якщо є потреба гнучкості, обовязково використовувати шаблони програмування (design patterns). Наприклад для відділення від БД слід використати Data Access Object. Для вебу - Model-View-Controller. Для сервісів, Facade і т.д.
5) Сам підхід до модульності, думаю заслуговує окремого обговорення.
6) Якщо треба взаємодіяти з апаратним рівнем, тоді шлях до .Net/Java - це довше і складніше.

Якщо є більш конкретніші архітектурні питання - будь ласка задавайте :)

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: Розробка модульних систем
« Відповідей #2 : 2009-09-04 15:37:29 »
Прошу вказати на існуючі рішення і документацію

Inferno. Без жартів. :-|
[Fedora Linux]

Відсутній miwa

  • Літератор
  • ******
  • дописів: 1111
  • Карма: +0/-0
Re: Розробка модульних систем
« Відповідей #3 : 2009-09-05 00:28:28 »
Брав участь у розробці подібних речей на Java.
...
Якщо є більш конкретніші архітектурні питання - будь ласка задавайте :)
1. Не зрозумів. Кожен клієнт фізично не далі як за кілька кілометрів (а як правило - не більше 20-30 метрів) від сервера з відносно надійним (виділені лінії або DSL+VPN, якщо не рахувати локальні мережі) звязком. Деякі сервери між собою час від часу звязуються (дисконтна система покупців між магазинами). Проте можна вважати кожен сервер і клієнтів навколо нього автономною локальнюо системою. І кожну локальну систему можна вважати цілком незалежною від іншої.
2. Саме фізична взаємодія з пристоями і малась на увазі. Конкретно - сканери штрих-кодів, касові апарати, елекронні ваги, чекові принтери і т.п. Зараз працюють драйвери, писані на фріпаскалі і компільовані під кожну платформу поокремо. Дані вони віддають по ТСР/ІР, що дає надію на якийсь брудний чи не дуже хак на предмет повязати їх з локальними браузерами клієнтів (при розгляданні веб-варіанту).
3. РНР первинно орієнтований на веб що відбилось на його архітектурі. Пітон мені в цьому плані більше подобається (його розглядаю як один з найімовірніших варіантів подальшої роботи).
4. Потреба гнучкості - довго над тим думав. Щоб не вийшла гнучкість заради гнучності. Тобто, що дасть, наприклад, відділення від БД? Якщо наявна цілком влаштовує? (Це справді питання, яке потребує відповіді) Стосовно Facade - почитаю на свіжу голову, бо зараз воно мені виглядає як чистісіньке ООП; так само MVC для мене зараз виглядає тим, що російськомовні програмісти називають "трехзвенка".
5. Згоден. Тицьніть пальцем звідки почати читанину. Або почніть тут писанину :)
6. Ще раз повторюся - пітон як кросплатформер мені більше до душі. Або РНР (і javascript/ajax) для веб-розробки.

Архітектурні питання... Щоб їх задавати, треба знати хоч половину відповіді. Так що перше питання - де читати про цю половину :) Хоча зараз мене цікавить, чи реально на тому ж пітоні реалізувати набір модулів, котрі будуть керуватись одним е-е-е "гіпервізором"; при встановленні (компоновці) додавати у базу даних необхідні для їх роботи об'єкти; при оновленні - коректно оновлювати базу даних і при видаленні - так само коректно її чистити.
Таке питання, окрім іншого, мало б ілюструвати мій рівень заглибленості у проблему на даному етапі, я думаю.

Прошу вказати на існуючі рішення і документацію

Inferno. Без жартів. :-|

Ось це? Спасибі, почитаю. Але є підозра, що то надто круто для такого відносно дрібного проекту, як мій.
« Змінено: 2009-09-05 00:37:35 від miwa »
Читайте документацію - вона кермує.

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: Розробка модульних систем
« Відповідей #4 : 2009-09-05 12:22:45 »
Прошу вказати на існуючі рішення і документацію

Inferno. Без жартів. :-|

Ось це? Спасибі, почитаю. Але є підозра, що то надто круто для такого відносно дрібного проекту, як мій.

Воно маленьке за розміром. А за крутизною воно таке ж як і ваш проект. Прочитайте про принципи реалізації PlanB, Inferno, Plan9, і ви будете знати як реалізувати вашу платформу.

Вам потрібно спочатку почати з протколу для єдиної файлової системи, яка зв’яже різні ноди в одну файлову ієрархію. Так що для того щоб відкрити пристрій сканера на якійсь ноді вам потрібно було лише відкрити файл.

Це простіше зробити, ніж здається. Принципи протоколу можна підгледіти в PlanB  - там, здається, найкраща абстракція використовується, все вважається "коробками" і потрібен абсолютний мінімум системних викликів. Є також купа вже готових реалізацій протоколу 9P: http://ru.inferno-os.wikia.com/wiki/9P_Implemetations .
[Fedora Linux]