Поскольку ваше приложение, похоже, превратилось в большой шарик грязи, полное (или почти полное переписывание) может иметь смысл.
Вам также следует учитывать новые технологии, такие как ориентированные на документы базы данных (couchDB), MongoDB)
Большинство определений форм, вероятно, вполне может вписаться в ориентированные на документы базы данных.Например:
Чтобы определить форму клиента, вы можете использовать документ, который выглядит следующим образом:
{Type:"FormDefinition",
EntityType: "Customer",
Fields: [
{FieldName:"CustomerName",
FieldType:"String",
Validations:[
{ValidationType:"Required"},
{ValidationType:"StringLength", Minimum:15, Maximum:50},
]},
...
{FieldName:"CustomerType",
FieldType:"Dropdown",
PossibleValues: ["Standard", "Valued", "Gold"],
DefaultValue: ["Standard"]
Validations:[
{ValidationType:"Required"},
{
ValidationType:"Custom",
ValidationClass:"MySystem.CustomerName.CustomValidations.CustomerStatus"
}
]},
...
]
};
С этим типом документа для определения ваших форм вы можете легко добавлять формы и проверкикоторые являются специфическими для клиента.
Вы можете легко добавить подчиненные формы, используя тип поля SubForm или любой другой.
Вы можете определить FieldTypes для всех распространенных типов полей, таких как электронная почта, номера телефонов, адрес и т. Д.
namespace System.CustomerName.CustomValidations {
class CustomerStatus: IValidator {
private FormContext form;
private List<ValidationErrors> validationErrors;
CustomerStatus(FormContext fc) {
this.validationErrors = new List<ValidationErrors>();
this.form = fc;
}
public List<ValidationErrors> Validate() {
if (this.formContext.Fields["CustomerType"] == "Gold" && Int.Parse(this.form.Fields["OrderCount"]) < 10) {
this.validationErrors.Add(new ValidationError("A gold customer must have at least 10 orders"))
}
if (this.formContext.Fields["CustomerType"] == "Valued" && Int.Parse(this.form.Fields["OrderCount"]) < 5) {
this.validationErrors.Add(new ValidationError("A valued customer must have at least 5 orders"))
}
return this.validationErrors;
}
}
}
Запись документа с таким определением может выглядеть следующим образом:
{Type:"Record",
EntityType: "Customer",
Fields: [
{FieldName:"CustomerName", Value:"ABC Corp.",
{FieldName:"CustomerType", Value:"Gold",
...
]
};
Конечно, это решение - большая работа, но если / когда оно будет реализовано, то будет очень легко создавать / обновлять / настраивать формы.