Вопрос по EditableObject
От: Аноним  
Дата: 18.04.09 15:51
Оценка:
Добрый день.
Как быть если я хочу воспользоваться удобствами EditableObject, но мне нужно реализовать свою логику в свойствах класса и к примеру дополнительно еще реализовать IDataErrorInfo? Т.е. допустим есть сложная валидация в сеттере свойства и установка IDataErrorInfo.Error при необходимости. Как быть с таким свойством? Как сделать чтобы IsDirty работало корректно при изменении такого свойства?
Спасибо за помощь.
Re: Вопрос по EditableObject
От: ili Россия  
Дата: 20.04.09 04:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день.

А>Как быть если я хочу воспользоваться удобствами EditableObject, но мне нужно реализовать свою логику в свойствах класса и к примеру дополнительно еще реализовать IDataErrorInfo? Т.е. допустим есть сложная валидация в сеттере свойства и установка IDataErrorInfo.Error при необходимости. Как быть с таким свойством? Как сделать чтобы IsDirty работало корректно при изменении такого свойства?
А>Спасибо за помощь.

ручками... все ручками.

хотя, есть один способ антоматизации труда...

абстрактные поля класса "упаковываются" в EditableValue<T> или EditableObjectHolder
рулится это аттрибутами InstanceType или GlobalInstanceType

посмотрите как реализованы EditableValue<T> и EditableObjectHolder

думаю, можно сделать что-то вроде:

public struct MyWrapper<T> : IEditable, IMemberwiseEditable
{
    [GetValue, SetValue]
    public T Value
    {
        get { return _current;  }
        set 
        { 
            // some additional code here

            _current = value; 
        }
    }
}

public abstract class MyEntity : EditableObject<MyEntity>
{
    [InstanceType(typeof(MyWrapper<int>))]
    public abstract int SimeValue { get; set; }
}
Re[2]: Вопрос по EditableObject
От: Аноним  
Дата: 20.04.09 16:38
Оценка:
Спасибо за ответ.
Честно говоря думаю что это начинается какое-то извращенство. Да и придется реализовывать интерфейсы, тогда я вообще не вижу смысла наследоваться от EditableObject, если все придется делать самому.
В общем как я понимаю BLToolkit все-таки больше для маппинга данных сделан, а для удобства работы с бизнес-сущностями сделаны только самые простые вещи, работающие только в простых случаях. Я прав?
Re[3]: Вопрос по EditableObject
От: ili Россия  
Дата: 21.04.09 02:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В общем как я понимаю BLToolkit все-таки больше для маппинга данных сделан, а для удобства работы с бизнес-сущностями сделаны только самые простые вещи, работающие только в простых случаях. Я прав?


я таки не могу ответить на этот вопрос...
мне вполне хватает того, что предоставляет БЛТ для бизнес-сущностей...
вы скажите толком — чего надо, авось все проще чем кажется
Re[4]: Вопрос по EditableObject
От: Аноним  
Дата: 21.04.09 11:58
Оценка:
Здравствуйте, ili, Вы писали:

ili>я таки не могу ответить на этот вопрос...

ili>мне вполне хватает того, что предоставляет БЛТ для бизнес-сущностей...
ili>вы скажите толком — чего надо, авось все проще чем кажется

Хотелось бы автоматизировать реализацию IEditableObject и INotifyPropertyChanged, что в общем-то сделано в классе EditableObject. Но получается что использование EditableObject получается только в самых простых случаях, а когда нужно больше контроля (как в моем примере выше) то все становится совсем некрасиво и даже хуже чем если просто самому реализовать эти интерфейсы и все.
Re[5]: Вопрос по EditableObject
От: ili Россия  
Дата: 21.04.09 12:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Хотелось бы автоматизировать реализацию IEditableObject и INotifyPropertyChanged, что в общем-то сделано в классе EditableObject. Но получается что использование EditableObject получается только в самых простых случаях, а когда нужно больше контроля (как в моем примере выше) то все становится совсем некрасиво и даже хуже чем если просто самому реализовать эти интерфейсы и все.


кроме того, что я приводил выше, есть еще возможность сделать все на аспектах (здесь и здесь), и\или допилить кодогенерацию до требуемого уровня (вот тут я нихт не селен, подсказать ничего не могу).
Re[5]: Вопрос по EditableObject
От: ili Россия  
Дата: 21.04.09 12:34
Оценка: 7 (1)
Здравствуйте, Аноним, Вы писали:

а, ну и врожденная валидация
Re[6]: Вопрос по EditableObject
От: Аноним  
Дата: 21.04.09 12:40
Оценка:
Спасибо за ответы.
Думаю, что неплохо было бы сделать возможность задавать валидирующий метод удовлетворяющий определенному делегату.
Re[7]: Вопрос по EditableObject
От: ili Россия  
Дата: 21.04.09 16:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Спасибо за ответы.


незачто

А>Думаю, что неплохо было бы сделать возможность задавать валидирующий метод удовлетворяющий определенному делегату.


ну тык ни вопрос, реализуете своего наследника от ValidatorBaseAttribute, реализуете в нем метод IsValid(ValidationContext context), коий и вызывается при валидации. перегружаете GetErrorMessage(ValidationContext context) для получения сообщения об ошибке, ну и всё...
а что уж там в IsValid делается, это на ваше усмотрение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.