Если ваши классы растут настолько большими, вы думаете о том, как их вырезать в отдельные исходные файлы, у вас, вероятно, есть проблема с дизайном.
Модельный дизайн-контроллер (лучше, модель-контроллер-вид) создает небольшой модульный код почти автоматически.
Модель обрабатывает все, что связано с данными. Представление управляет фактическим визуальным интерфейсом, а контроллер склеивает два вместе. Каждый из них является отдельным классом, и в идеале модель и представление должны быть настолько независимыми, что их можно легко подключить к другому приложению.
Ключ должен быть совершенно беспощадным в функции разделения. Всегда заманчиво парковать данные в контроллере. Это особенно актуально, когда вы просто изучаете и пишете небольшие программы с очень маленькими данными. Однако по мере роста сложности данных ваш контроллер скоро взрывается со сложностью.
Весь хороший дизайн начинается с модели данных. Модель должна обрабатывать все логические отношения с данными, т. Е. Создавать, изменять, проверять, сохранять и т. Д. Правильно спроектированная модель данных полностью агностична в отношении пользовательского интерфейса. В идеальном случае модель данных должна работать со стандартными представлениями, веб-просмотрами, командной строкой или выгружать URL-адрес.
Я всегда начинаю проект, создавая модель данных в тестовом приложении с абсолютным минимальным интерфейсом. (Часто это просто пустое приложение, которое запускается, программно управляет моделью данных, печатает на консоль и завершает работу.) Только когда модель данных работает независимо, я перехожу к остальной части программы.
Теперь, когда я понимаю операции с данными и данными, я могу создать пользовательский интерфейс для каждой среды, в которой я буду работать. Пользовательский интерфейс понимает только, как создавать элементы пользовательского интерфейса и как реагировать на события. Он не содержит никаких данных или даже логики, связывающих элементы друг с другом.
Контроллер склеивает представление/с и модель данных вместе. Контроллер знает только, какие сообщения отправлять в модель данных, чтобы получать данные, которые поступают в определенный элемент пользовательского интерфейса, в ответ на конкретное событие. Он не проверяет данные и не выполняет на нем никаких логических операций. Он просто перенаправляет информацию между моделью данных и видом момента.
Любая операция, такая как печать, создающая другой интерфейс, должна иметь свой собственный объект контроллера. Например, при печати только модель данных понимает, как все данные объединяются на странице. Нет причин, по которым тот же контроллер, который контролирует представление пользовательского интерфейса, должен контролировать печать. Вместо этого контроллер печати просто запрашивает модель данных для печати данных. Контроллер пользовательского интерфейса должен делать ничего, кроме вызова контроллера печати и указания его на данные, выбранные пользователем.
В вашем конкретном примере методы расчета будут представлены в модели данных, методах печати в контроллере печати и т. Д. Используя контроллер модели-просмотра, вы получаете множество удивительно небольших модульных классов, которые легко управляются , проверены и портированы.
Большое спасибо за фрагменты кода, Costique! Мне понадобится некоторое время, чтобы изучить код Apple (а также прочитать «категории»), поэтому я не смогу сразу попробовать его, но ему удастся закончить это в выходные. Тогда я вернусь к тебе. В то же время, еще раз спасибо за вашу помощь :-) – Bender
Добро пожаловать. – Costique