Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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: 334; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию