Дерево объектов и DSL
От: Аноним  
Дата: 23.08.13 08:10
Оценка:
Привет.
Есть дерево объектов, типа


City
{
 Name
}


Issuer
{
 Code
 City
}


Passport
{
 Date
 Issuer
}


User 
{
  Name
  Surname
  Passport
}


Данные записываются в бинарный формат, где в соответствующий атрибут (в примере это цифровые значения, например 123456) заносятся данные из объектов
Например
SetData(user.Name, 123456)
SetData(user.Surname, 123457)
SetData(user.Passport.Issuer.Code, 123458)
SetData(user.Passport.Issuer.City.Name, 123459)


Одно и тоже значение может записываться в несколько атрибутов
SetData(user.Passport.Issuer.Code, 123458)
SetData(user.Passport.Issuer.Code, 233458)


Могут быть условия
if(user.Surname != String.empty)
    SetData(user.Surname, 123457)    
else
    SetData(user.Name, 123457)

То есть если одно поле пустое, то записываем значение из другого поля

Все это добро было захардкожено в коде. Теперь понадобилось дать возможность настройки пользователям

Насколько понимаю, это подходит под понятие dsl.
Погуглил по этому поводу.
Пока в голове два примерных варианта
Вариант 1:
@User
 Surname = 123457
 Surname = 323457
 Name = 123457
 if empty surname then name 123457  

@Issuer
 Code = 123458


Вариант 2:
user.Name = 123456
user.Surname = 123457
user.Surname = 323457
if empty user.Surname then user.Name 123457  
user.Passport.Issuer.Code = 123458


Предпологается использовать так. на вход подается экземпляр user, далее при помощи reflection считываются значения из соответствующих свойств и записываем эти данные в бинарный формат с атрибутами полученными из файла конфигурации.

В этом плане, вариант 2 полегче будет для работы через reflection. Первый вариант легче читается и пользователю будет его легче поддерживать.

Хотелось бы услышать мнение людей по этому поводу. Может я не туда полез и это можно сделать проще/правильнее.
Спасибо.
Re: Дерево объектов и DSL
От: noofiz  
Дата: 24.08.13 12:39
Оценка: -1
Здравствуйте, Аноним,

Откровенно говоря то что вы делаете — чудовищный велосипед. Давно уже все написано и придусывать ничего не надо, только кастомизировать под себя. Могу книгу порекомендовать по данной теме — Groovy for Domain-Specific
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.