|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Привет всем! Делаю небольшой калькулятор по расчету в своей профессиональной области (программирование на уровне хобби). Сохранение в базе данных изначально не планировал, да и сейчас, по крайней мере не первостепенная задача. Решил сохранять данные в XML. Я так понял, простая сериализация/десериализация мне не подойдет, так как связи между классами достаточно сложные, не просто дерево - многие объекты используются другими объектами совместно, при этом у объектов нет ID (может я не правильно понял конечно и можно сделать и через сериализацию). Или можно сделать у всех объектов ID и сохранять через сериализацию? Сейчас хочу выделить слой доступа к данным - из файла заполнять датасет и работать уже с ним как с хранением в базе данных. А уже датасет сохранять в XML и восстанавливать из XML при загрузке. Это будет более правильный подход чем "ручное" сохранение в XML? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2018, 11:07 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Евгений, Екатеринбург, попробуйте посмотреть в сторону SQLite, если вам нужно хранить данные в файлах, он хорошо решает этот вопрос ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2018, 11:19 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Евгений, ЕкатеринбургСейчас хочу выделить слой доступа к данным - из файла заполнять датасет и работать уже с ним как с хранением в базе данных. А уже датасет сохранять в XML и восстанавливать из XML при загрузке. Это будет более правильный подход чем "ручное" сохранение в XML?нет. Вы упрямо не хотите изучать БД. Тогда слой доступа к данным DAL будет как белая ворона в архитектуре. Не хотите РСУБД, берите ООБД или облако. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2018, 19:03 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Petro123Вы упрямо не хотите изучать БД. Тогда слой доступа к данным DAL будет как белая ворона в архитектуре. Не хотите РСУБД, берите ООБД или облако. Я немного работал с РСУБД и мог бы реализовать здесь работу с БД. Но я хочу сделать просто сохранение в файл и загрузку из файла. Например, так как это организовано в вордах-экселях. Не везде же нужны БД. Я интересуюсь, как так организовать хранение и структуру данных сейчас, чтобы в будущем (если решусь разработать клиент-серверный вариант), проблем при переходе было меньше. Т.е. как сейчас максимально абстрагироваться от хранения данных. Нужно ли мне в классах обязательно предусматривать ID? Их пока не заполнять или заполнять каким-то внутренним генератором? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 07:59 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Евгений, Екатеринбург, используйте ORM, как вариант EntityFramework. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2018, 08:12 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
vb_subЕвгений, Екатеринбург, используйте ORM, как вариант EntityFramework. Правильно ли я понимаю, что EntityFramework это подход автоматического создания и поддержки метаданных РСУБД из объектов ООП-кода C# (и/или наоборот)? Если я понимаю правильно, то пока не понял, чем это мне поможет организовать вывод в файл? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 08:08 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Евгений, ЕкатеринбургТ.е. как сейчас максимально абстрагироваться от хранения данных.Евгений, Екатеринбург, вот для этого Вам подойдет использование ORM. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 08:30 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
vb_subЕвгений, ЕкатеринбургТ.е. как сейчас максимально абстрагироваться от хранения данных.Евгений, Екатеринбург, вот для этого Вам подойдет использование ORM.ОРМ только для РСУБД. Не для файлов. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 11:35 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Можно сереализовать в json. Потом когда надоест возится с файлами можно будет легко перейти на монгу ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 11:46 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Евгений, ЕкатеринбургПривет всем! Решил сохранять данные в XML. Я так понял, простая сериализация/десериализация мне не подойдет, так как связи между классами достаточно сложные, не просто дерево - многие объекты используются другими объектами совместно, при этом у объектов нет ID (может я не правильно понял конечно и можно сделать и через сериализацию). Или можно сделать у всех объектов ID и сохранять через сериализацию? Сейчас хочу выделить слой доступа к данным - из файла заполнять датасет и работать уже с ним как с хранением в базе данных. А уже датасет сохранять в XML и восстанавливать из XML при загрузке. Это будет более правильный подход чем "ручное" сохранение в XML? ИМХО, лучше заморочиться с ID и раскидать сущности по разным XML, как-будто по таблицам в БД. А вообще, не быстрое это дело. При любом изменении данных будет переписываться целиком весь XML. А если вдруг их количество или объем возрастут, то и тормоза станут заметны. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 12:23 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
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.
Это работает, но при добавлении полей надо менять метод выгрузки в XML, это не очень удобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 12:47 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Евгений, Екатеринбург, ну, пользуйся DataSet ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 13:16 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Евгений, ЕкатеринбургЯ бы хотел, чтобы пользователь как в ворде - выбрал и открыл файл, поработал, нажал "Сохранить", закрыл программу. Не надо ни БД, ни разных XML, один файл с которым человек работает, может передать коллегам и т.д. В ворде, если что, формат .docx - это как раз несколько XML-файлов внутри архива. А файл sqlite, которую советовали выше, можно передавать точно так же, как и файл с xml. Евгений, ЕкатеринбургСейчас я "ручками" классы выгружаю Это работает, но при добавлении полей надо менять метод выгрузки в XML, это не очень удобно. Ознакомьтесь с примерами автоматической XML-сериализации: https://docs.microsoft.com/en-us/dotnet/standard/serialization/examples-of-xml-serialization ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 13:41 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныОзнакомьтесь с примерами автоматической XML-сериализации: Я это и имел ввиду автор А уже датасет сохранять в XML и восстанавливать из XML при загрузке. Это будет более правильный подход чем "ручное" сохранение в XML? Т.е. вы считаете, это будет хороший подход в моем случае? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 14:08 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Евгений, ЕкатеринбургЯ это и имел ввиду И в тогда ваша чем проблема? Создаете свои классы, сериализуете их XmlSerializer'ом. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 14:31 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныИ в тогда ваша чем проблема? Создаете свои классы, сериализуете их XmlSerializer'ом. Проблема в том, что я бы хотел делать "как правильно", но не знаю правильный ли путь я выбираю. А то может я думаю, что надо делать именно так, а реально это "из гавна и палок". Т.е. я создал классы без ID и руками сохранял их. Теперь вижу что это был неправильный путь. Хотел узнать, правильно ли делать через датасет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 14:55 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Евгений, ЕкатеринбургПроблема в том, что я бы хотел делать "как правильно", но не знаю правильный ли путь я выбираю. А то может я думаю, что надо делать именно так, а реально это "из гавна и палок". Т.е. я создал классы без ID и руками сохранял их. Теперь вижу что это был неправильный путь. Хотел узнать, правильно ли делать через датасет. Если логика работы с классами бизнес-логики не подразумевает работы с каким-либо ID, то он не нужен. И классы бизнес-логики вообще ничего не должны знать о том, как их сохраняют, это не их ответственность - соответственно, они не должны содержать ничего, что каким-либо образом относилось к логике сохранения/восстановления. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 15:05 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Опишите модель хранения данных, когда картина будет перед вашими глазами, вам станет ясно, как это сохранить так, чтоб было наиболее удобно с этим работать. Иначе в процесс может оказаться, что выбранный способ категорически не походит и переделать надо будет очень и очень многое ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 15:09 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Евгений, Екатеринбург, Вы работаете с файлами, но вас тянет работать "по взрослому"? Ну дак надо выбирать. Нельзя узнать новое не попробовав. Решайте! Что вы спрашиваете? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 18:13 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Евгений, ЕкатеринбургТ.е. вы считаете, это будет хороший подход в моем случае? В школе 10 лет только изучают подходы. И не спрашивают, надо ли это. Есть базовое образование. И мы на сайте sql.ru. Обратили внимание? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2018, 18:16 |
|
Посоветуйте по организации слоя доступа к данным
|
|||
---|---|---|---|
#18+
Евгений, Екатеринбург, Наверно сперва нужно для себя четко разделить, объект предметной области, мат модель предметной области, модель хранения и место хранения. Объект предметной области — различные сущности связанные друг с другом, имеющее ссылки друг на друга, наследуется друго от друга, определенная логика взаимодействия, логика вычислений. Мат модель предметной области, из того что я понял что-то похожее на граф, или набор C# классов. То как вы это спроецировали на программный код (классы) и как реализуется логика вычисления. Модель хранения. Как я понял, свой сложный набор взаимосвязных классов (мат модель), вы серелизуется, как говорится «ручками» в XML. И проблема в том, что при различных изменениях вам приходится этот менять код XML сохранения/чтения. Места хранения, подразумевают какую-то структуру. И в чистом виде с вашими данными это не очень стыкуется (так чтоб постоянно не менять код). Для того чтоб стыкавалось, нужно делать прослойку, которую вы видимо обозвали «слой доступа к данными». Как сохранять (какую выбрать модель хранения)... Мне что-то подсказывает что на вашу мат модель можно посмотреть как на граф и превратить её в список объектов и список связей, у объектов можно сделать список атрибутов. То есть это может быть три таблицы. Конечно же для объекта/атрибута/связи нужно делать свой ID, или StringCode а лучше UUID. Можно посмотреть в сторону EAV , там думаю в одну таблицу можно уместиться. Это и будет «моделью хранения» А далее, три таблицы, или одну — сохранять в виде XML, либо реляционную БД (место хранения), собственно большой разницы нет. Только что БД будет определенно быстрее на больших объемах чем XML, который все грузит в память. В вашем случае — без разницы. Для того чтоб не менять код каждый раз при изменении объектов (например появления нового поля), можно использовать Reflection, то есть пометить у классов то что нужно для сохранения атрибутами, и после, получать список полей/свойств для сохранения. При загрузке через этот же механизм искать нужно поле/свойство и заполнять его. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 15:59 |
|
|
start [/forum/topic.php?fid=20&fpage=27&tid=1399230]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 146ms |
0 / 0 |