Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Опт. решение для разделения объектов данных от чтения/записи и отображения

12.03.20 08:53
Re: Опт. решение для разделения объектов данных от чтения/записи и отображения
 
Программист коренной житель
в ответ 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

 

Перейти на