Вход на сайт
Опт. решение для разделения объектов данных от чтения/записи и отображения
795 просмотров
Перейти к просмотру всей ветки
Программист коренной житель
в ответ AlexNek 11.03.20 21:38
И как мне эти интерфейсы воткнуть в редактор? Которому надо что то типа "ColumnAbc = item.Length". Вытаскивать всё самому из объекта довольно долго. Да и структура объекта довольно сложная
Так в чем проблема-то?
public interface IReadWrite { void Read(Stream s); void Write(Stream s); } public interface IEditor { string Name { get; } int Length { get; } IEnumerable<IEditor> SubItems { get; } bool IsAvailable { get; set; } } public class SomeObject : IReadWrite, IEditor { private string _name = string.Empty; private List<SomeObject> _subObjects = new List<SomeObject>(); private bool _isAvailable = false; void IReadWrite.Read(Stream s) { ... } void IReadWrite.Write(Stream s) { ... } string IEditor.Name { get { return _name; } } int IEditor.Length { get { return _subObjects.Count; } } IEnumerable<IEditor> IEditor.SubItems { get { return _subObjects; } } bool IEditor.IsAvailable { get { return _isAvailable; } set { _isAvailable = value; } } } public class SomeEditor { public void Show(IEditor editor) { ColumnName = editor.Name; ColumnLength = editor.Length; CheckBoxAvailable.Checked = editor.IsAvailable; ListSubitens.AddRange(editor.SubItems); } } public class ReaderObj { public void Read(IReadWrite obj) { Stream s = // get stream obj.Read(s); } } public class Processing { public void DoWork(ReaderObj reader, SomeEditor editor) { SomeObject obj = new SomeObject(); reader.Read(obj); editor.Show(obj); } }
Очевидно, что класс ReaderObj может быть в любой сборке, также как и SomeEditor. При этом у объекта SomeObject нет никаких видимых полей. Более того, ни ReaderObj, ни SomeEditor вообще ничего не знают ни про какие объекты.
Не понимаю, какие тут могут быть трудности? Или ты в лучших традициях Murr'а утаил какие-то детали? :D