Други!
Возвращаюсь в эту тему с очередным концептуальным вопросом. Каждый раз, когда мне требуется реализовать очередную функцию, я дико мучаюсь, куда её, пардон, вставлять. С одной стороны, имеем понятие "single responsibility", что несомненно есть благо. Но в пределе такой подход означает - "один метод - один класс" (причём иногда именно так и происходит).
Поэтому мой вопрос - о критериях выделения каких-то функций/методов в самостоятельные классы или, напротив, группировки их в один класс. И если с первым хоть как-то интуитивно понятно, то со вторым - полная каша в голове.
Вот например, обсуждаем в
соседней теме вопросы многоязычности приложения. Понятно, что весь функционал загрузки данных из XML лучше выделить в отдельный класс и наладить с ним простое как грабли взаимодействие: ты ему ID-шник, он тебе обратно - фразу (в моём случае массив фраз, но это неважно). Никаких вопросов. Но вот, например, есть функционал (также обсуждавшийся в этой теме выше) подбора словесных расшифровок для свойств персонажа, типа "дурак - умный - гениальный". Там уже не просто запрос варианта, но и некая логика, основанная на текущих значениях свойств персонажа, таким образом, он взаимодействует с классом Character. Его можно выделить в полностью самостоятельный класс, можно создать что-то типа CharacterModel и поместить туда вместе с другими методами обработки свойств персонажа...
Или ещё пример. Для построения удобочитаемых фраз имеем алгоритм подстановки в полученный кусок текста имени собственного в нужном падеже. Он получает фразу из XML, плюс "знает" что должно быть в него подставлено вместо *$a1. Другой метод получает на входе оценку двух частей сложносочинённого предложения и выдаёт связующий союз (типа "ему охота,
и ей охота" и "ему охота,
но ей не хочется"). Вроде метод тоже языковой... Имеет смысл объединять их вместе или нет? Какая логика? Не чувствую её.
