powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Посоветуйте по организации слоя доступа к данным
22 сообщений из 22, страница 1 из 1
Посоветуйте по организации слоя доступа к данным
    #39703434
Евгений, Екатеринбург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!
Делаю небольшой калькулятор по расчету в своей профессиональной области (программирование на уровне хобби).
Сохранение в базе данных изначально не планировал, да и сейчас, по крайней мере не первостепенная задача. Решил сохранять данные в XML. Я так понял, простая сериализация/десериализация мне не подойдет, так как связи между классами достаточно сложные, не просто дерево - многие объекты используются другими объектами совместно, при этом у объектов нет ID (может я не правильно понял конечно и можно сделать и через сериализацию). Или можно сделать у всех объектов ID и сохранять через сериализацию?
Сейчас хочу выделить слой доступа к данным - из файла заполнять датасет и работать уже с ним как с хранением в базе данных. А уже датасет сохранять в XML и восстанавливать из XML при загрузке. Это будет более правильный подход чем "ручное" сохранение в XML?
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39703446
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений, Екатеринбург,

попробуйте посмотреть в сторону SQLite, если вам нужно хранить данные в файлах, он хорошо решает этот вопрос
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39703828
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений, ЕкатеринбургСейчас хочу выделить слой доступа к данным - из файла заполнять датасет и работать уже с ним как с хранением в базе данных. А уже датасет сохранять в XML и восстанавливать из XML при загрузке. Это будет более правильный подход чем "ручное" сохранение в XML?нет.
Вы упрямо не хотите изучать БД. Тогда слой доступа к данным DAL будет как белая ворона в архитектуре.
Не хотите РСУБД, берите ООБД или облако.
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39703951
Евгений, Екатеринбург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Вы упрямо не хотите изучать БД. Тогда слой доступа к данным DAL будет как белая ворона в архитектуре.
Не хотите РСУБД, берите ООБД или облако.
Я немного работал с РСУБД и мог бы реализовать здесь работу с БД. Но я хочу сделать просто сохранение в файл и загрузку из файла. Например, так как это организовано в вордах-экселях. Не везде же нужны БД.
Я интересуюсь, как так организовать хранение и структуру данных сейчас, чтобы в будущем (если решусь разработать клиент-серверный вариант), проблем при переходе было меньше. Т.е. как сейчас максимально абстрагироваться от хранения данных.
Нужно ли мне в классах обязательно предусматривать ID? Их пока не заполнять или заполнять каким-то внутренним генератором?
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39703961
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений, Екатеринбург,
используйте ORM, как вариант EntityFramework.
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39704669
Евгений, Екатеринбург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subЕвгений, Екатеринбург,
используйте ORM, как вариант EntityFramework.
Правильно ли я понимаю, что EntityFramework это подход автоматического создания и поддержки метаданных РСУБД из объектов ООП-кода C# (и/или наоборот)? Если я понимаю правильно, то пока не понял, чем это мне поможет организовать вывод в файл?
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39704675
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений, ЕкатеринбургТ.е. как сейчас максимально абстрагироваться от хранения данных.Евгений, Екатеринбург, вот для этого Вам подойдет использование ORM.
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39704815
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subЕвгений, ЕкатеринбургТ.е. как сейчас максимально абстрагироваться от хранения данных.Евгений, Екатеринбург, вот для этого Вам подойдет использование ORM.ОРМ только для РСУБД. Не для файлов.
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39704820
BlackEric
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно сереализовать в json. Потом когда надоест возится с файлами можно будет легко перейти на монгу
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39704842
Minatavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений, ЕкатеринбургПривет всем!
Решил сохранять данные в XML. Я так понял, простая сериализация/десериализация мне не подойдет, так как связи между классами достаточно сложные, не просто дерево - многие объекты используются другими объектами совместно, при этом у объектов нет ID (может я не правильно понял конечно и можно сделать и через сериализацию). Или можно сделать у всех объектов ID и сохранять через сериализацию?
Сейчас хочу выделить слой доступа к данным - из файла заполнять датасет и работать уже с ним как с хранением в базе данных. А уже датасет сохранять в XML и восстанавливать из XML при загрузке. Это будет более правильный подход чем "ручное" сохранение в XML?

ИМХО, лучше заморочиться с ID и раскидать сущности по разным XML, как-будто по таблицам в БД.

А вообще, не быстрое это дело. При любом изменении данных будет переписываться целиком весь XML. А если вдруг их количество или объем возрастут, то и тормоза станут заметны.
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39704864
Евгений, Екатеринбург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinatavrИМХО, лучше заморочиться с ID и раскидать сущности по разным XML, как-будто по таблицам в БД.

Что-то я совсем запутался. Может я неверно задачу объяснил.
Я бы хотел, чтобы пользователь как в ворде - выбрал и открыл файл, поработал, нажал "Сохранить", закрыл программу. Не надо ни БД, ни разных XML, один файл с которым человек работает, может передать коллегам и т.д.
Классов не так уж много - может штук 30. Но связи между ними не совсем простые - некоторые классы входят в другие, причем родители могут быть разных классов. Если завести ID, можно ли будет обойтись простой сериализацией?
Сейчас я "ручками" классы выгружаю
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
public XmlElement SaveToXMLNode(XmlDocument xmlDocument)
        {
            XmlElement xmlNode = xmlDocument.CreateElement("Wall");
//Выгружаем свойства
            XMLOperations.AddAttribute(xmlNode, xmlDocument, "Name", Name);
            XMLOperations.AddAttribute(xmlNode, xmlDocument, "ReWriteHeight", Convert.ToString(ReWriteHeight));
            XMLOperations.AddAttribute(xmlNode, xmlDocument, "Height", Convert.ToString(Height));
            XMLOperations.AddAttribute(xmlNode, xmlDocument, "ConcreteStartOffset", Convert.ToString(ConcreteStartOffset));
            XMLOperations.AddAttribute(xmlNode, xmlDocument, "ConcreteEndOffset", Convert.ToString(ConcreteEndOffset));
            XMLOperations.AddAttribute(xmlNode, xmlDocument, "ReiforcementStartOffset", Convert.ToString(ReiforcementStartOffset));
            XMLOperations.AddAttribute(xmlNode, xmlDocument, "ReiforcementEndOffset", Convert.ToString(ReiforcementEndOffset));
            XMLOperations.AddAttribute(xmlNode, xmlDocument, "OverrideVertSpacing", Convert.ToString(OverrideVertSpacing));
            XMLOperations.AddAttribute(xmlNode, xmlDocument, "OverrideHorSpacing", Convert.ToString(OverrideHorSpacing));
            XmlElement StartPointNode = StartPoint.SaveToXMLNode(xmlDocument, "StartPoint");
            xmlNode.AppendChild(StartPointNode);
            XmlElement EndPointNode = EndPoint.SaveToXMLNode(xmlDocument, "EndPoint");
            xmlNode.AppendChild(EndPointNode);
//Выгружаем вложенные элементы
            foreach (OpeningPlacing obj in OpeningPlacingList)
            {
                xmlNode.AppendChild(obj.SaveToXMLNode(xmlDocument));
            }
            XmlElement VertSpacingSettingNode = VertSpacingSetting.SaveToXMLNode(xmlDocument, "VertSpacingSetting");
            xmlNode.AppendChild(VertSpacingSettingNode);
            XmlElement HorSpacingSettingNode = HorSpacingSetting.SaveToXMLNode(xmlDocument, "HorSpacingSetting");
            xmlNode.AppendChild(HorSpacingSettingNode);
            return xmlNode;
        }


Это работает, но при добавлении полей надо менять метод выгрузки в XML, это не очень удобно.
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39704894
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений, Екатеринбург,

ну, пользуйся DataSet
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39704932
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений, ЕкатеринбургЯ бы хотел, чтобы пользователь как в ворде - выбрал и открыл файл, поработал, нажал "Сохранить", закрыл программу. Не надо ни БД, ни разных XML, один файл с которым человек работает, может передать коллегам и т.д.
В ворде, если что, формат .docx - это как раз несколько XML-файлов внутри архива. А файл sqlite, которую советовали выше, можно передавать точно так же, как и файл с xml.
Евгений, ЕкатеринбургСейчас я "ручками" классы выгружаю
Это работает, но при добавлении полей надо менять метод выгрузки в XML, это не очень удобно.
Ознакомьтесь с примерами автоматической XML-сериализации: https://docs.microsoft.com/en-us/dotnet/standard/serialization/examples-of-xml-serialization
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39704959
Евгений, Екатеринбург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныОзнакомьтесь с примерами автоматической XML-сериализации:
Я это и имел ввиду
автор А уже датасет сохранять в XML и восстанавливать из XML при загрузке. Это будет более правильный подход чем "ручное" сохранение в XML?
Т.е. вы считаете, это будет хороший подход в моем случае?
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39704984
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений, ЕкатеринбургЯ это и имел ввиду
И в тогда ваша чем проблема? Создаете свои классы, сериализуете их XmlSerializer'ом.
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39705019
Евгений, Екатеринбург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныИ в тогда ваша чем проблема? Создаете свои классы, сериализуете их XmlSerializer'ом.
Проблема в том, что я бы хотел делать "как правильно", но не знаю правильный ли путь я выбираю. А то может я думаю, что надо делать именно так, а реально это "из гавна и палок".
Т.е. я создал классы без ID и руками сохранял их. Теперь вижу что это был неправильный путь. Хотел узнать, правильно ли делать через датасет.
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39705030
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений, ЕкатеринбургПроблема в том, что я бы хотел делать "как правильно", но не знаю правильный ли путь я выбираю. А то может я думаю, что надо делать именно так, а реально это "из гавна и палок".
Т.е. я создал классы без ID и руками сохранял их. Теперь вижу что это был неправильный путь. Хотел узнать, правильно ли делать через датасет.
Если логика работы с классами бизнес-логики не подразумевает работы с каким-либо ID, то он не нужен. И классы бизнес-логики вообще ничего не должны знать о том, как их сохраняют, это не их ответственность - соответственно, они не должны содержать ничего, что каким-либо образом относилось к логике сохранения/восстановления.
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39705037
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опишите модель хранения данных, когда картина будет перед вашими глазами, вам станет ясно, как это сохранить так, чтоб было наиболее удобно с этим работать.
Иначе в процесс может оказаться, что выбранный способ категорически не походит и переделать надо будет очень и очень многое
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39705182
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений, Екатеринбург,
Вы работаете с файлами, но вас тянет работать "по взрослому"?
Ну дак надо выбирать.
Нельзя узнать новое не попробовав.
Решайте! Что вы спрашиваете?
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39705184
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений, ЕкатеринбургТ.е. вы считаете, это будет хороший подход в моем случае?
В школе 10 лет только изучают подходы.
И не спрашивают, надо ли это.
Есть базовое образование. И мы на сайте sql.ru. Обратили внимание?
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39707784
Кифирчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений, Екатеринбург,

Наверно сперва нужно для себя четко разделить, объект предметной области, мат модель предметной области, модель хранения и место хранения.

Объект предметной области — различные сущности связанные друг с другом, имеющее ссылки друг на друга, наследуется друго от друга, определенная логика взаимодействия, логика вычислений.

Мат модель предметной области, из того что я понял что-то похожее на граф, или набор C# классов. То как вы это спроецировали на программный код (классы) и как реализуется логика вычисления.

Модель хранения. Как я понял, свой сложный набор взаимосвязных классов (мат модель), вы серелизуется, как говорится «ручками» в XML. И проблема в том, что при различных изменениях вам приходится этот менять код XML сохранения/чтения.

Места хранения, подразумевают какую-то структуру. И в чистом виде с вашими данными это не очень стыкуется (так чтоб постоянно не менять код). Для того чтоб стыкавалось, нужно делать прослойку, которую вы видимо обозвали «слой доступа к данными».

Как сохранять (какую выбрать модель хранения)...
Мне что-то подсказывает что на вашу мат модель можно посмотреть как на граф и превратить её в список объектов и список связей, у объектов можно сделать список атрибутов. То есть это может быть три таблицы. Конечно же для объекта/атрибута/связи нужно делать свой ID, или StringCode а лучше UUID. Можно посмотреть в сторону EAV , там думаю в одну таблицу можно уместиться. Это и будет «моделью хранения»
А далее, три таблицы, или одну — сохранять в виде XML, либо реляционную БД (место хранения), собственно большой разницы нет. Только что БД будет определенно быстрее на больших объемах чем XML, который все грузит в память. В вашем случае — без разницы.

Для того чтоб не менять код каждый раз при изменении объектов (например появления нового поля), можно использовать Reflection, то есть пометить у классов то что нужно для сохранения атрибутами, и после, получать список полей/свойств для сохранения. При загрузке через этот же механизм искать нужно поле/свойство и заполнять его.
...
Рейтинг: 0 / 0
Посоветуйте по организации слоя доступа к данным
    #39707940
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кифирчик,
EAV можно, но у него много противопоказаний и ОРМ сразу идет лесом.
Рефлексия тоже самое.
Решать автору.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Посоветуйте по организации слоя доступа к данным
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]