Я пытаюсь определить лучший шаблон дизайна, который будет использоваться для веб-службы проверки бизнес-ключа. Ниже приводится базовый логический поток. Программа примет параметр и использует поле, чтобы определить путь к поиску нескольких систем, где этот бизнес-ключ можно найти. Сначала выполняется поиск в System1, если не найден, поиск System2 и System3. Логика поиска System1 зависит от поля в параметре, переданном в исходный метод проверки.Какие шаблоны проектирования используются для реализации этой бизнес-логики?
Я не совсем уверен, какой шаблон дизайна использовать. Это похоже на команду, цепочку ответственности, метод шаблонов, которые можно использовать здесь.
С моей реализации ниже, я вижу следующие проблемы:
Каждый метод SearchSystemX нуждается в знать возвращать нулевое значение, если ключ бизнес не найден, так что метод «контроль» будет продолжать искать другие системы.
Каждый SearchSystemX должен знать как заполнить бизнес-объект, в настоящее время только что реализованный простой примитивной строкой, но это, например, только.
Пожалуйста, дайте мне знать ваши мысли.
public string Validate (string parms) {
string returnValue = null;
returnValue = SearchSystem1(parms);
if (returnValue == null) {
returnValue = SearchSystem2(parms);
if (returnValue != null) {
returnValue = SearchSystem3(parms);
}
else if (returnValue == null) {
if (parms == "Criteria1") {
returnValue = SearchSystem4(parms);
if (returnValue == null) {
throw new ApplicationException("ID Invalid");
}
}
else if (parms == "Criteria2") {
throw new ApplicationException("ID Invalid");
}
}
}
return returnValue;
private string SearchSystem1 (string parms) {
string returnValue = null;
if (parms == "Criteria1") {
returnValue = SearchSystem1UsingColumn1(parms);
}
else if (parms == "Criteria2") {
returnValue = SearchSystem1UsingColumn2(parms);
if (returnValue == null) {
returnValue = SearchSystem1UsingColumn4(parms);
}
}
if (returnValue != null) {
returnValue = FetchXYCoordinate(parms);
}
return returnValue;
}
Спасибо!
Это кажется излишним, поскольку требования не указывают на необходимость динамического создания цепей, что является основным преимуществом CoR. Кроме того, где будет определена эта цепочка? –
Мне нравится эта реализация, но внутри SearchSystem1 существует условный поток, основанный на критериях. Кроме того, иногда, если он найден в одной системе, это означает, что мы хотим собирать дополнительные данные из другой системы. Не знаете, как бы вы выразили это в цепочке, поскольку вы можете либо вернуть значение null, либо результат. – JustinDSN
Трудно сказать, почему бы вам не опубликовать код и посмотреть, что это значит? – OscarRyz