Я действительно полагаю, что включение типа является запахом кода. Однако я разделяю Ваше беспокойство о разделении проблем в коде. Но они могут быть решены во многих отношениях, которые позволяют Вам все еще использовать полиморфизм, например, шаблон "посетитель" или что-то подобное. Читайте на "Шаблоны разработки" Бандой Четыре.
, Если Ваши базовые объекты как Клиент остается фиксированным большую часть времени, но операции часто изменяются, то можно определить операции как объекты.
interface Operation {
void handlePrimeCustomer(PrimeCustomer customer);
void handleMidPrimeCustomer(MidPrimeCustomer customer);
void handleSubPrimeCustomer(SubPrimeCustomer customer);
};
class InvestibleOperation : public Operation {
void handlePrimeCustomer(PrimeCustomer customer) {
bool investible = customer.isCeo();
}
void handleMidPrimeCustomer(MidPrimeCustomer customer) {
handleSubPrimeCustomer(customer);
}
void handleSubPrimeCustomer(SubPrimeCustomer customer) {
bool investible = customer.getSavingsAccount().getBalance() > 1e6;
}
};
class SubPrimeCustomer : public Customer {
void doOperation(Operation op) {
op.handleSubPrimeCustomer(this);
}
};
class PrimeCustomer : public Customer {
void doOperation(Operation op) {
op.handlePrimeCustomer(this);
}
};
Это похоже на излишество, но оно может легко сохранить Вас большое кодирование, когда необходимо обработать операции как наборы. Например, отобразите всех их в списке и позвольте пользователю выбрать тот. Если операции определяются как функции, Вы легко заканчиваете с большим количеством твердого кодированного Case Logic переключателя, несколько мест, который должен быть обновлением каждый раз, когда Вы добавляете другую операцию, или продукт , поскольку я вижу, что это упомянуло здесь.
Итак, чтобы очистить это, я думаю, ответ таков: даже если я ограничу Я на западные языки, я не могу попросить .Net framework для букв алфавита. Я сам составил список из букв, к счастью, осталось только четыре языка.
To the best of my knowledge, neither .NET nor Windows provide this information. However, you can find it in the Unicode Consortium's CLDR database. This DB is actually a set of XML files (one for each language. named after the language abbreviation) containing all sorts of localisation info. A gold mine!
the element /ldml/characters/examplarCharacters contains a list of characters used in the language. e.g., for Swedish (sv.xml):
[a-v x-z å ä ö]
Note that when you say 'ASCII letters', you do realize you're limiting yourself to the Latin script, don't you? As far as ar the CLDR is concerned, lists such as a-z are Unicode characters sequences, not just ASCII letters. eg, in Russian (from ru.xml):
[а-е ё ж-я]
Я не думаю, что он доступен программно по умолчанию, но вот хороший набор справочных документов на веб-сайте Эвертипа
Вы все равно отправите список строк вашим переводчикам. Для каждого языка вашего сайта у вас будет один, и каждый из них будет знать ответ на своем языке. Так что просто отправьте им строку "abcdefghijklmnopqrstu vwxy z"
и задокументируйте это как alplabet, используемый для разбиения по страницам. Они должны быть в состоянии перевести это для вас. Имейте в виду, что вы можете получить такие записи, как ... «x ij z» для голландского языка - «ij» - это обычное написание одной буквы IJ