Veikedo

Untitled

Mar 16th, 2020
658
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.10 KB | None | 0 0
  1. Вам нужно сделать десериализацию ваших объектов из xml файла. (Можно добавить метод Deserialize в ваш интерфейс ISerializer)
  2.  
  3. Сам класс Person не должен ничего знать о сериализаторах и о том, как он хранится.
  4.  
  5. Примерно такая архитектура/классы должны быть:
  6. OtusXmlSerializer<T> : ISerializer<T>
  7. OtusStreamReader<T> : IEnumerable<T>, IDisposable
  8. PersonSorter : ISorter<T>
  9. Person
  10.  
  11. Более подробно:
  12. * ISerializer<T>
  13. Имеет два метода:
  14. string Serialize<T>(T item);
  15. T Deserialize<T>(Stream stream);
  16.  
  17. если лень работать со стримами, можете Deserialize заменить на:
  18. T Deserialize<T>(string data);
  19. Но тогда в OtusStreamReader тоже используйте строки.
  20.  
  21. * OtusXmlSerializer<T> : ISerializer<T>
  22. для реализации методов интерфейса используем этот пакет https://www.nuget.org/packages/ExtendedXmlSerializer/
  23. Примеры работы описаны здесь https://extendedxmlserializer.github.io/documentation/conceptual/documents/The-Basics.html
  24. Также на проекте с урок в гитхабе есть пример https://github.com/Veikedo/Otus.Interfaces/blob/master/Otus.Interfaces/2.%20Strategy.cs#L25
  25.  
  26. * OtusStreamReader<T>
  27. В конструкторе получаем Stream и ISerializer<T>. В методе GetEnumerator() вызываем serializer.Deserialize<T[]>(Stream) и проходимся в цикле по массиву, возвращая элементы с помощью yield return.
  28. Да, можно было бы просто вернуть массив, но мы заодно научимся работать с yield.
  29.  
  30. * ISorter<T>
  31. имеет один метод
  32. IEnumerable<T> Sort<T>(IEnumerable<T> notSortedItems);
  33.  
  34. * PersonSorter : ISorter<Person>
  35. реализует метод Sort<Person>. Можно просто вызвать метод Linq
Add Comment
Please, Sign In to add comment