Я думаю о написании предметно-ориентированного языка (DSL) для моделирования бизнес-объектов. DSL не будет выполнен, вместо этого он будет использоваться генератором кода на основе шаблонов (вероятно, CodeSmith) для генерации .NET & SQL.
DSL должен будет поддерживать определение следующих элементов:
- Классы (название и описание)
- Свойства (имя, понятное имя, тип, ноль / не ноль)
- Простая проверка (требуется, регулярное выражение, диапазон и т. Д.)
- Отношения между классами (от 1 до 1, от 1 до многих, от многих до многих)
- Наследование (возможно, в версии 2)
Вот простой пример того, как может выглядеть код DSL:
Class: Insured
Desc: "Represents a person covered by an insurance policy"
Prop: FirstName, "First Name", String(20), not null
Prop: LastName, "Last Name", String(20), not null
Prop: MailAddress, "Mailing Address", Address, not null
Prop: SSN, "Social Security Number", String(9), null
Rule: RegEx, SSN, ^\d{9}$
Class: Address
Prop: Line1, "Line 1", String(30), not null
Prop: City, "City", String(30), not null
Prop: State, "State", String(2), not null
...
Ради простоты DSL более сложные правила проверки будут кодироваться на целевом языке. Текущий план состоит в том, чтобы запретить сгенерированный код и добавить более сложные правила в подклассы.
Кто-нибудь написал что-то подобное этому? Можете ли вы дать какие-либо советы или ссылки на аналогичные решения?