У меня есть финансовое приложение, которое обрабатывает «облигации». Мне нужноСоздание объектов - Полиморфизм
- Модель приложения, чтобы избежать анемичной модели (что я понимаю плохо).
- Мгновентиляция различных реализаций в зависимости от типа связи.
Система получает инструкции от внешней системы и применяет инструкции к указанной связи. следовательно, у меня есть юридическое лицо
Instruction[Id,BondReference,Action,Value]
например. из инструкции к голосования 'да' для разрешения в передается на связи
Instruction
{
BondReference: Bond1,
Action: Vote
Value: VoteYes
ResolutionReference: Resolution1
}
и лица Bond
Bond
{
Id: 1,
Reference: Bond1
Resolutions: [
{Resolution1: We have resolved to increase our stake in Google},
{Resolution2: We have resolved to fire the CEO}
...
]
Instructions: [Inst1,Inst2,Inst3...]
}
Однако, инструкция, как правило, делает больше, чем просто одна вещь () - это очень много инструкций в одном), например инструкция отменить предыдущую инструкцию, что означало бы, во-первых, отменяет предыдущую транзакцию, тогда некоторые значения должны быть пересчитаны. Кроме того, одна команда может перегружаться, это может быть отмена предыдущей инструкции, а также голосование за разрешение.
Мне было предложено использовать службу домена для обработки новой инструкции.
BondService
{
public void Apply(Instruction newInstruction)
{
var bond = _bondRepository.GetByReference(newInstruction);
bond
.RecalculateNominalValue(newInstruction)
.CalculateInterest(newInstruction)
.CancelInstruction(newInstruction)
.Approve(newInstruction);
}
}
Проблема я вижу с этой структурой является то, что для каждой команды, все методы называются даже если метод не имеет значения. Я мог бы использовать некоторые операторы if, но тогда код выглядел бы неопрятным.
Теперь мой вопрос,
- Это лучший способ модель?
- И для расчета, в зависимости от типа связи, расчет отличается. Поэтому я хочу реализовать полиморфизм. Мне сказали, что мне нужно использовать фабрику для создания правильной реализации. Это лучший подход?
Для BondType 1,3,5 я использую calculationA для bondType 2,7 ... мне нужно использовать Расчет B. Как я Instantiate различных типов известково ??? NB, я хорошо разбираюсь в полиморфизме, однако я не смог найти убедительные примеры того, как создавать правильную реализацию. Thnx за чтение этого далеко ...
thanx для ответа, единственное, что я не упомянул, это то, что это проект заброшенного поля, и мы медленно преобразуем его в новое приложение, и тем временем мы будем использовать существующий интерфейс, следовательно, мы не может изменить структуру db и т. д. Поэтому я буду учитывать предложение источника событий (но, вероятно, (скорее всего) не реализуется сейчас), потому что мне нужно делать некоторые чтения по теме и т. д. Больше всего мне понравилось то, что 1 instr = несколько событий (я бы, скорее всего, создавал несколько команд из 1 инструкции). я буду отмечать как ответ, как только я реализую ваши предложения – sawe
, поэтому мне нужна фабрика, потому что около 3 bondTypes используют один расчет, а один тип bondType использует другой расчет. поэтому в долгосрочной перспективе можно было бы добавить bondTypes, которые использовали бы другой расчет, поэтому * 1 bondType! = 1 расчет *. поэтому использование метода bondType для выполнения вычислений будет означать, что я дублирую вычисления в разных местах. имеет смысл? или я могу объяснить далее – sawe