Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Результати виконання практичних завдань. Завдання 1. Створення і реалізація інтерфейсу для роботи з файлами
Завдання 1. Створення і реалізація інтерфейсу для роботи з файлами.
Загальна ієрархія класів, що призначені для роботи з файлами, показана на рисунку 1.
Клас сховища даних, що базується на файловому введенні-виведенні, WorldFileRepository успалковує клас WorldRepository, а також успалковує інтерфейс IFileRepository, реалізацію якого делегує внутрішньому об’єкту класу FileController (лістинг 1).
Лістинг 1 – Реалізація класу WorldFileRepository
using Common.Data; using Common.Interfaces; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WorldDivision.Interfaces;
namespace WorldDivision.Data {
public class WorldFileRepository: WorldRepository, IFileRepository {
private readonly FileController fileController;
private IWorldDataIOController dataIOController;
public IWorldDataIOController DataIOController { get { if (dataIOController == null) { dataIOController = new WorldBinaryDataController(); } return dataIOController; } set { dataIOController = value; } }
public WorldFileRepository(string name): base(name) { fileController = new FileController("WorldDivision"); }
public WorldFileRepository() : this("WorldFileRepository") { }
public override void Save() { DataIOController.Save(dataContext, this.FileName); }
public override void Load() { DataIOController.Load(ref dataContext, this.FileName); }
public string DirectoryName { get { return fileController.DirectoryName; } set { fileController.DirectoryName = value; } }
public string FilePath { get { return fileController.FilePath; } }
private string fileName;
public string FileName { get { //if (String.IsNullOrWhiteSpace(fileName)) { // fileName = CreateFileName(); //} return fileName; } set { fileController.PrepareFileNameToSave(ref value, DataIOController.FileExtension); this.fileName = value; Clear(); } }
public string CreateFileName() { return fileName = fileController.CreateFileName( DataIOController.FileExtension); }
public string FileExtension { get { return DataIOController.FileExtension; } }
public void Save(string fileName) { fileController.PrepareFileNameToSave(ref fileName, DataIOController.FileExtension); DataIOController.Save(dataContext, fileName); }
} }
Завдання 2. Створення контролерів введення-виведення даних.
Реалізацію методів Load()і Save()інтерфейсу IRepository, який успадковується базовим класом DataRepository, клас WorldFileRepository делегує контролерам введення-виведення даних, які реалізують інтерфейс IWorldDataIOController. На даний час створено два класи, що реалізують цей інтерфейс: клас WorldBinaryDataController, який використовує двійкову серіалізацію, та клас WorldXmlDataController, що використовує Xml- серіалізацію.
Лістинг 2 – Реалізація класу WorldBinaryDataController
namespace WorldDivision.Data {
public class WorldBinaryDataController : IWorldDataIOController {
public string FileExtension { get { return ".wdbd"; } }
public void Load(ref WorldDataContext dataContext, string fileName) { // граничні оператори string ext = Path.GetExtension(fileName).ToLower(); if (ext!= this.FileExtension) { throw new ArgumentException( "WorldBinaryDataController.Load: fileName", "Помилкове розширення файлу: для файлів, " + "що зберігають результат двійкової " + "серіалізації даних про сутності ПО " + "\"Поділ Світу\", передбачено розширення " + this.FileExtension); }; BinaryFormatter bFormatter = new BinaryFormatter(); using (FileStream fSteam = File.OpenRead(fileName)) { dataContext = (WorldDataContext)bFormatter. Deserialize(fSteam); } }
public void Save(WorldDataContext dataContext, string fileName) { // граничні оператори string ext = Path.GetExtension(fileName).ToLower(); if (ext!= this.FileExtension) return;
BinaryFormatter bFormatter = new BinaryFormatter(); using (var fStream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None)) { bFormatter.Serialize(fStream, dataContext); } }
} }
Лістинг 2 – Реалізація класу WorldXmlDataController
namespace WorldDivision.Data {
public class WorldXmlDataController : IWorldDataIOController {
public string FileExtension { get { return ".wdbd"; } }
public void Save(WorldDataContext dataContext, string fileName) { // граничні оператори string ext = Path.GetExtension(fileName).ToLower(); if (ext!= this.FileExtension) return; //CorrectionFileName(ref fileName);
using (FileStream fSteam = File.Create(fileName)) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(WorldDataContext)); xmlSerializer.Serialize(fSteam, dataContext); } }
public void Load(ref WorldDataContext dataContext, string fileName) { // граничні оператори string ext = Path.GetExtension(fileName).ToLower(); if (ext!= this.FileExtension) { throw new ArgumentException( "WorldXmlDataController.Load: fileName", "Помилкове розширення файлу: для файлів, " + "щозберігають результат XML-серіалізації " + "даних, використовується розширення " + this.FileExtension); }; using (FileStream fSteam = File.OpenRead(fileName)) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(WorldDataContext)); dataContext = (WorldDataContext)xmlSerializer.Deserialize(fSteam); } }
} } Date: 2015-09-02; view: 362; Нарушение авторских прав |