Я разрабатываю простую приложение телефонной книги WPF, которая использует данные XML. Моя идея - сделать его более общим, чтобы я мог использовать данные SQL вместо данных XML , если это необходимо. Именно поэтому я выбрал базовый шаблон проектирования.Как я могу сделать словарь общим IEnumerable для шаблона Factory Design
Вот мой интерфейс (который функционирует как абстрактный класс):
public interface IPhoneBookData
{
Dictionary<string,string> GetPhoneBookData();
}
Вот класс, который наследует от этого интерфейса с использованием данных XML и возвращает словарь:
using System.Collections.Generic;
using PhoneBook.BL.XML;
using PhoneBook.BL.XML.ParserXML;
public class PhoneBookDataXml : IPhoneBookData
{
private string _path;
Dictionary<string, string> _phoneBookDict = new Dictionary<string,
string>();
public PhoneBookDataXml(string path)
{
_path = path;
}
public Dictionary<string, string> GetPhoneBookData()
{
var phoneBookXml = ParseXml.Deserialize<PhoneBookXml>(_path);
foreach (var item in phoneBookXml.Properties)
{
_phoneBookDict.Add(item.Key, item.Value);
}
return _phoneBookDict;
}
}
Вот мой завод Класс:
public static class PhoneBookDataFactory
{
public static IPhoneBookData GetPhoneBookClass(string input)
{
if (input.ToLower().Contains("xml"))
{
return new PhoneBookDataXml(input);
}
return null;
}
}
И, наконец, вот мой MainViewModel Class (WPF MVVM), который использует завод для XML:
public MainViewModel()
{
_nameList = new List<string>();
_phoneList = new List<CustomKeyValuePair<string, string>>();
//_phoneList = new List<string>();
var PhoneBookDataInstance =
PhoneBookDataFactory.GetPhoneBookClass("PhoneBook.xml");
_phoneBookDict = PhoneBookDataInstance.GetPhoneBookData();
_nameList = _phoneBookDict.Keys.ToList();
}
Я знаю, что словарь наследует ICollection, который наследует от IEnumerable, но я попытался сделать его общим и не удалось.
Я буду благодарен, если вы можете показать мне, как «GetPhoneBookData», что вернет общую коллекцию, и я смог бы преобразовать ее в словарь или любую другую коллекцию, которая потребуется в будущем.
'Словарь <строка, строка>' может быть отброшен до 'ICollection>' –
Hopeless
Комментарий к форматированию: я отредактировал ваш вопрос, чтобы отметить новые разделы с помощью '---' (который добавляет горизонтальное правило), что более удобно для мобильных устройств, чем '=========================== и т.д. –