В настоящее время я работаю над системой CQRS.Как проверить порядок параметров C#
Он использует команды и события, которые являются стандартной практикой. Команды и события - это только классы .NET, но эти классы часто содержат несколько идентификаторов в качестве свойств, и эти идентификаторы - это все гиды.
Это приводит к возникновению проблемы при построении классов. Существует большой, если не огромный риск того, что кто-то из команды вызовет конструктор с параметрами в неправильном порядке. Вы можете себе представить, как эта простая проблема будет разрушительной, то есть OrderId, назначенной CustomerId и наоборот.
Итак, я ищу идеи, как это решить.
У меня есть некоторые идеи.
- Создайте отдельный тип для каждого Id. То есть замените guid большим количеством типов. Это очевидное решение OO. Но мне это не нравится по ряду причин.
- Согласованное присвоение имен и Unittesting: Если мы всегда называем Id таким Id. Мы можем проверить, что список параметров в вызывающем и вызываемом абонентах одинаковый (или аналогичный). И игнорируйте случаи, когда мы просто используем Guid.NewGuid(). Однако тест не прост. Для параметров вызываемого метода довольно легко получить список параметров с помощью Reflection или Mono.Reflection. Для звонящего это другое дело. Например, переменные в методе могут быть оптимизированы. Поэтому для тестирования вызывающего абонента нам нужно сделать что-то другое, кроме отражения, например, по стилю.
В целом, я не продаюсь ни по одной идее, а хотел бы сделать что-то более простое или, возможно, готовое решение?
Использование дискретного типа является «самым безопасным» внутри системы типов, но это только толкает, когда значения могут случайно пересекаться или смешиваться до другого уровня. Согласованное присвоение имен хорошо, независимо от того, требуется ли правильное тестирование (для семантической проверки, например, для упорядочения поля с одинаковой типизацией). (Кроме того, использование другого типа/дискретного типа строго не связано с ООП.) – user2864740
Этот вопрос кажется не по теме, поскольку речь идет не о конкретной проблеме программирования, а будет лучше подходит для [programers.stackexchange.com ] (http://programmers.stackexchange.com/). –
Кроме того, я не уверен, что это действительно имеет отношение к CQRS.Это больше связано с передачей значений в качестве параметров конструктору или методу с более чем одним параметром того же типа. Ответы, безусловно, будут упрямиться и могут кардинально измениться. –