Статья Robert Martin о Открывает, Closed Principle обеспечивает другую точку зрения:
ОБЪЕКТЫ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ (КЛАССЫ, МОДУЛИ, ФУНКЦИИ, ETC.) ДОЛЖНО БЫТЬ ОТКРЫТО ДЛЯ РАСШИРЕНИЯ, НО ЗАКРЫТЫЙ ДЛЯ МОДИФИКАЦИИ.
В Вашем примере кода, Вы эффективно включаете клиента 'Тип Категории'
boolean investible ;
switch (customer.getCategory()) {
case SUB_PRIME:
case MID_PRIME:
investible = customer.getSavingsAccount().getBalance() > 1e6; break;
case PRIME:
investible = customer.isCeo(); break;
}
В этой нынешней обстановке, новые клиентские категории могли бы возникать ;-). Это означает иметь необходимость открыть этот класс и постоянно изменять его. Могло бы быть хорошо, если у Вас только есть единственный оператор переключения, но что происходит, если Вы хотите использовать подобную логику в другом месте.
, А не другие предложения, где isInvestible
сделан методом на Customer
, я сказал бы, что Cagtegory должен стать абсолютным классом, и используемый для того, чтобы принять эти решения:
boolean investible ;
CustomerCategory category = customer.getCategory();
investible = category.isInvestible(customer);
class PrimeCustomerCategory extends CustomerCategory {
public boolean isInvestible(Customer customer) {
return customer.isCeo();
}
}
Что ж, я не знаю, предлагаю ли я MSMQ, но я предполагаю, что есть много крайних случаев, о которых следует подумать для "собственного выбора".
Даже при использовании подхода пула потоков имейте в виду, что могут возникнуть проблемы с упорядочением, если вы заботитесь - два элемента, отправленные последовательно в пулы потоков, могут не выполняться по порядку из-за того, как пулы потоков обрабатывают рабочие элементы.
Вам также необходимо подумать о постоянстве сообщений и о том, как долго они должны существовать, как определить «фатальный» статус недоставки и что делать в этом случае.
Есть также ряд потенциальных преимуществ. случаи в сценариях, когда ваше приложение выходит из строя примерно в то же время, когда оно ставит сообщение в очередь - например, оно может не получить подтверждение того, что сообщение было поставлено в очередь, даже если оно было. Да,