В моем приложении я выделил следующие уровни логики приложения:
- Утилиты
- Абстракция приложения
- Простая/обычная реализация абстракции приложения (#2)
- Конкретная реализация приложения (дополнительные функции и классы для добавления № 3, чтобы соответствовать нашим окончательным целям приложения)
- абстрактная архитектура приложения mvc (абстракция для логики приложения mvc)
- конкретное приложение mvc
Описание этих уровней:
- Утилиты, библиотеки и прочее... (не имеет зависимости, может использоваться каким-либо конкретным классом приложений)
- Абстрактные классы приложения. Определяет очень абстрактные классы приложений (не имеет зависимости)
- Конкретные классы абстрактного приложения. Определяет обычно конкретные классы абстрактного приложения (имеют зависимость с логическим уровнем #2)
- Конкретные (окончательные) приложения. Определяет наши классы finally для конкретной модели приложения (имеют зависимость с логическим уровнем #3 и #2)
- абстрактная архитектура MVC приложения. Определяет абстракцию для нашего конкретного приложения MVC (не имеет зависимости)
конкретная MVC-архитектура приложения: конкретный контроллер, представления, модели. Конкретный рабочий процесс приложения (MVC: представления как представления, модели как прокси, контроллер для связи обоих)
- Models are simple Proxies that work with level #4 (dependence with #5 and #4)
- Контроллер и представление не знают о том, какие классы использует модель (не имеет зависимости ни от одного уровня, кроме #5).
- Модель обменивается данными с представлением, используя «объекты значений» (определенные в логике № 5)
Пример приложения для игры в автомобили:
EngineUtils
,TrackUtils
и так далееICar
,ITrack
,IEngine
,ITrackFactory
,IEngineFactory
и так далееCar
,Track
,SimpleEngine
,AdvancedEngine
,EngineFactory
и так далее (реализовать интерфейсы #2)HondaCar
,FordCar
,BMWCar
,TorontoTrack
,TokyoTrack
,DushanbeTrack
,KualaLumpurTrack
,TrackFactory
,SuperEngine
,ExtendedEngineFactory
и так далееITrackProxy
,ICarProxy
,CarVo
,TrackVo
,TrackListVo
,CarListVo
и так далееGameController
,TrackView
,CarView
,CarProxy
,TrackProxy
и так далее. Обмен данными по модели ‹-> представление:CarVo
,TrackVo
,TrackListVo
,CarListVo
и т.д.
Что вы думаете об этих уровнях? И если все в порядке, я думаю, как разделить все эти уровни в проекте? (по пространствам имен или по библиотекам). Если пространства имен, то у меня проблема с именованием этих пространств имен...