public struct FIO
{
[Size(40)]
[Persistent]
public string LastName { get; set; }
[Size(30)]
[Persistent]
public string FirstName { get; set; }
[Size(30)]
[Persistent]
public string MiddleName { get; set; }
}
public class Person : XPObjectBase
{
// ФИО
private FIO fio;
// Еще куча полей
// ......
public Person() { }
public Person(Session session) : base(session) { }
[Persistent]
public FIO FIO
{
get { return fio; }
set { SetPropertyValue("FIO", ref fio, value); }
}
}
Отвечаю, почему хочется использовать именно структуру: есть такие наборы примитивных полей, которые встречаются повсеместно в бизнес-логике в разных сущностях, и не хотелось бы их дублировать везде, например ФИО (фамилия, имя, отчество), Период (дата с, дата по). Платформа структуру раскладывает в набор полей в master object'е, а не создает отдельную таблицу. В структуре можно определить различные дополнительные свойства и методы, например форматирование или валидацию.
Вариант использовать отдельный полноценный класс, пометить свойство на него в Aggregated плох тем, что то, что определает структура - не является полноценной сущностью.
Почему же такая скудная функциональность по работе со структурами? При использовании структуры внутри XPO объекта невозможно отредактировать ее значение в DetailView, так как редакторы видны, но задизейблены. Можно ли как-нибудь сделать нормальную работу с ними? Или получить возможность переиспользвания набора полей каким-нибудь другим способом (например через XPObjectBase, который раскладывается в набор полей master object'а)?