Использование структур в XAF

72 views
Skip to first unread message

Maru Sama

unread,
Jun 5, 2014, 12:55:20 AM6/5/14
to russian-dev...@googlegroups.com
Здравствуйте!
Поясню на примере (.NET 4.5, XAF 14.1.3):

    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'а)?
Спасибо за внимание!

Dennis Garavsky

unread,
Aug 19, 2014, 4:12:10 AM8/19/14
to russian-dev...@googlegroups.com
Здравствуйте, поддержка структурный полей (в частности раскладывание в набор полей) была сделана чисто для сценариев работы с легаси базами (таблицы с композитными ключами, мапинг на виюхи), которые не являются основными. По этой же причине мы не стали это делать в DC изначально: https://www.devexpress.com/Support/Center/Question/Details/S38866
Если говорить про использование структуры в XAF (поля видны, но нельзя редактировать), так это потому, что для структур нет специального PropertyEditor и используется дефолтный - сделайте свой и все будет, хотя специальной поддержки для структур опять же мы не закладывали и нужно дальше тестировать интересующие вас сценарии.
Сейчас же решать вашу задачу можно композицией (по такому же принципу работает множественное наследование и "раскладывание полей" в DC) либо наследованием, если получается.

четверг, 5 июня 2014 г., 8:55:20 UTC+4 пользователь Maru Sama написал:
Reply all
Reply to author
Forward
0 new messages