Так что этот вопрос - вот что следует отсюда (how to deal with multiple event args). Этот вопрос заставил меня подумать об этом, но он достаточно разный, чтобы оправдать собственную нить.вопрос о дизайне/структуре применения и разделении проблем
Я создаю игру (для развлечения и обучения) и хотел бы знать, пользуюсь ли я хорошими стандартами для дизайна или нет. Я думаю, что я, возможно, пошел OTT на разделение проблем, или просто получил все это неправильно, но я надеюсь, что это не так. У меня нет проблем с переписыванием, поскольку я хочу узнать «лучшие практики» и практическое их применение.
EDIT
Позвольте мне объяснить немного больше об игре, он основан на Jawbreaker игру во многих мобильных телефонах (quick demo found here). Цель состоит в том, чтобы выбрать шары, которые находятся в группах, чтобы удалить их из игры и набрать как можно больше очков.
Я пытаюсь расширить его немного и иметь разные типы досок, шары перемещаются по-разному и разные типы шаров, шары могут просто идти туда, где им говорят, или они могут что-то сделать по пути.
Так вот структура объектов я создал, верхний ряд показывает библиотеки с их объектами, вторая строка показывает, что эти объекты ссылаются:
alt text http://lh3.ggpht.com/_eoaz2oX5m6U/SypiyjHGQoI/AAAAAAAAAUo/2geWlqNHqbs/structure.jpg
Вот моя попытка делать UML :
alt text http://yuml.me/3279d2ac
Click here to link to full page for UML, makes it a little larger and hopefully easier to read
В DLL объектов хранятся основные объекты, используемые в игре «Мячи и доска». Они не содержат никакой логики о том, как они действуют/реагируют на ситуации (шар реализует методы CompareTo и Equals). Там может быть X число реализаций IBall (и то же самое для IBoard, хотя этого не будет, как я себе представляю).
DLL-файл InstanceManager используется как способ создания объектов, но не уверен, что это было 100% -ное значение, которое он мог бы найти в DLL-объектах. Фабрики - это статические классы, которые имеют различные перегруженные методы для создания объектов IBall. BallFactory может принимать объект BallType Enum, A Drawing.Color и т. Д. BoardFactory очень похож. Jawbreaker - это одноэлементный объект, который имеет дело с такими вещами, как проведение случайного объекта, поскольку он используется очень регулярно и некоторые данные GameConfiguration (что не так актуально для этой темы).
DLL Engine - это то место, где происходит большая часть работы. LogicFactories берут объекты BallType и BoardType для создания соответствующих логических объектов. Логические объекты используются для управления работой объекта IBall и IBoard. BallLogic сообщает шару, что он может делать, когда его события срабатывают. Например, когда выбран Ball, в Ball Logic вызывается метод, который был выбран Ball X на плате Y. Затем мяч может делать то, что должен/мог делать его тип мяча. BoardLogic очень похож и имеет дело с тем, как действует правление.
Объект Engine - еще один синглтон, и как GUI будет взаимодействовать со всей игрой. GUI не будет создавать экземпляр любого из других объектов напрямую.
Итак, чтобы обобщить классы IBall и IBoard, просто сохраните данные о них, классы Logic имеют дело со всеми функциональными возможностями.
То, что я хотел бы знать:
1) Является ли это разумный подход?
2) Должен ли (вообще) логик быть отдельным от Объектов/данных?
3) Неужели я зашел слишком далеко с разделением проблем?
4) Любые другие комментарии по поводу дизайна/структуры
EDIT
Причина я использовал пару одиночек отчасти для простоты доступа к данным в одном месте, не держась объектов все время, а также только потому, что это отдельная игра и не будет масштабироваться ни до высокого, ни с нескольких компьютеров. Я понимаю, что они не велики, и это не то, что я использую регулярно, но ценю комментарии.
Благодарим вас за ваши мысли и отзывы.
Хотя ваше объяснение вашего дизайна ясное, я думаю, что если вы поместите свой дизайн в диаграмму класса UML (скажем), вы сможете более четко понять свое сообщение. Читая текст, я должен мысленно продолжать рисовать стрелки, чтобы понять, как все эти классы взаимодействуют. – sateesh
Очень хорошая точка, сделайте это сегодня вечером и выложите ее как можно скорее. Спасибо Sateesh – Jon
Взгляните на UML UML или Netbeans UML, это поможет вам разработать классы для uml. – monksy