Архитектура для моделирования - PullRequest
1 голос
/ 11 сентября 2008

Распространенным решением для построения модели системы, состоящей из множества элементов разных типов, является создание модульной системы, в которой каждый модуль отвечает за определенный тип. Например, будет модуль для вомбатов WombatModule: IModule, где интерфейс IModule имеет такие методы, как GetCount () (для определения количества вомбатов) и Update () (для обновления состояния всех вомбатов).

Более объектно-ориентированным подходом было бы иметь класс для каждого типа элемента и создавать экземпляр для каждого элемента. Это сделает класс Wombat: IItem с такими методами, как Update () (чтобы обновить этот Wombat).

С точки зрения кода разница незначительна, но время выполнения существенно отличается. Модульно-ориентированное решение, безусловно, быстрее: меньше создание объектов, проще оптимизировать операции, общие для всех вомбатов.

Проблемы возникают при увеличении количества типов и модулей. Либо вы теряете большую часть преимущества в производительности, потому что каждый модуль поддерживает только несколько элементов, либо повышается сложность модулей, чтобы приспособиться к немного различным элементам одного общего типа - скажем, толстым и тонким вомбатам. Или оба.

По крайней мере, однажды я видел, как он ухудшается до плохого состояния, когда все, что делает WombatModule, это сохранять коллекцию скрытых объектов Wombat и запускать их методы в цикле.

Когда производительность представляет меньшую проблему, чем долгосрочная разработка, можете ли вы определить какие-либо архитектурные причины для использования модулей вместо отдельных элементов? Может быть, я упускаю еще одну возможность?

1 Ответ

1 голос
/ 11 сентября 2008

Я работаю на embedded software company, а наш code base довольно большой. База кода была разработана с модулями, которые выполняют определенные функции и поддерживают некоторые объекты - также некоторые объекты существуют как просто независимые объекты. Самая большая проблема, которую мы видим с нашим подходом, состоит в различении границ модулей. Наши модули со временем имеют тенденцию усложняться и медленно развиваться для выполнения функций, которые изначально находились за его пределами. Я бы сказал, что лучшее направление - это модульное проектирование и реализация очень специфических объектов, а также специальное усилие, чтобы модули не росли больше, чем вы хотели.

...