Предположим, что есть M
отделы и N
типы документов, и для каждой возможной комбинации этих двух значений необходимо предпринять отдельное действие.
В такой проблеме есть внутренняя сложностьзаявление, в котором вы не можете покончить с определением того, какими будут все эти действия (M x N
), и если каждый атрибут вашего принтера приводит к разным действиям для каждой возможной комбинации отдела и типа документа, то вы должны также определить их отдельно.
Рассмотрим четырехмерную матрицу.Первое измерение - это атрибут, второе измерение - отдел, третье измерение - тип документа, а четвертое измерение - соответствующее действие, которое необходимо выполнить для комбинации этих трех значений.
по крайней мере, нужно определить эти действия:
var matrix = {
AttributeA: {
DepartmentX: {
DocumentP: SomeActionA,
DocumentQ: AnotherActionA
},
DepartmentY: {
DocumentP: SomeActionB,
DocumentQ: AnotherActionB
}
},
AttributeB: {
// similar structure
},
// and so on...
};
Теперь у вас может быть одна функция, которая принимает ваш атрибут, отдел и тип документа и выполняет действие:
function takeAction(attribute, department, documentType) {
// maybe do a sanity check of your inputs
matrix[attribute][department][documentType](); // calling the action!
}
Таким образомвы отделяете настраиваемые данные от общей логики.