
da horsie
06.04.2017
01:58:04
Как и где ты их создаешь?

Max
06.04.2017
01:59:49

da horsie
06.04.2017
02:01:10
Кто отвечает за операции сохранения и чтения из хранилища?

Google

da horsie
06.04.2017
02:02:54
Если сами сущности, то возможен вариант типа такого

Max
06.04.2017
02:02:58
Как и где ты их создаешь?
пока нигде, но предположительно так, всё классически - gui -> app -> какая-то логика -> модель (с raw sql-запросами)

da horsie
06.04.2017
02:03:23
entity = Entity.readFrom(this.storage);
entity.saveTo(this.storage)

Max
06.04.2017
02:03:58
Сегодня у меня простой функционал, и я модель дергаю из app, далее отдаю на гуй. Завтра функционал добавится, нужно валидировать\чего-то подсчитывать, добавится класс бизнес-логики между app и моделью.

da horsie
06.04.2017
02:04:21
Есть вариант создать EntityRepository
foo = fooRepo.findById(42)
Есть вариант посмотреть в сторону Data Mapper
Или dependency injection container

Max
06.04.2017
02:06:33
В идеале, моя задача - проследовать канонам DDD, создать максимально реюзабельный код под cli\gui\web\mobile\etc. Понятно что для этого надо городить абстракции, но я пока от простого к сложному двигаюсь.

da horsie
06.04.2017
02:07:40
Архитектура системы есть функция от потока внешних требований
Пришло новое требование - реализовал
Видишь, что часть требований однотипны - поправил архитектуру, чтобы было проще на них реагировать

Google

da horsie
06.04.2017
02:09:04
Дизайн не бывает сам по себе
И пытаться предугадать дизайном будущие требования, как правило, бесполезно

Sergei
06.04.2017
02:11:32
YAGNI, да

Max
06.04.2017
02:11:49

da horsie
06.04.2017
02:12:13
Ок. Какую задачу ты сейчас решаешь?

Max
06.04.2017
02:15:16
Ок. Какую задачу ты сейчас решаешь?
Это мой самый первый вопрос) Православный способ организовать доступ к базе в питоне, не используя orm. Я советы про синглтон прочел, спасибо. Умные статьи советуют в питоне бзать модули, не синглтоны (но питон вообще оч странный язык, если в java все оборачивается в класс, тут - в модули)

da horsie
06.04.2017
02:16:05
Откуда требование "не использовать орм"?
Оно странное

Max
06.04.2017
02:17:17

da horsie
06.04.2017
02:17:46
Орм это не про замену sql на dql или что-то такое
И не про конкретную реализацию орм
Это про то, как превратить объект в памяти в набор данных, уложенных в реляционную таблицу
И задавая свой вопрос ты на самом деле спрашиваешь "как мне начать строить свою орм"

Max
06.04.2017
02:19:57
Ну либо я леплю свой доступ к базе и пишу raw-sql, либо беру orm и пишу RawQuery, тут разницы никакой, я думаю.

da horsie
06.04.2017
02:20:06
А нужно ли тебе именно РЕЛЯЦИОННОЕ хранилище?
Само свойство реляционности уже чревато сложностями
https://en.m.wikipedia.org/wiki/Object-relational_impedance_mismatch
https://www.youtube.com/watch?v=WW2qPKukoZY&feature=share

Max
06.04.2017
02:23:40

da horsie
06.04.2017
02:23:44
Не питон, но очень правильно про орм

Google

da horsie
06.04.2017
02:26:28
https://www.youtube.com/watch?v=QaIGN_cTcc8&feature=share
А вот эта про "у меня типичный crud"
ORM != persistence layer
Именно из-за буквы R

Max
06.04.2017
02:30:37
А какой это тогда layer?
Я понимаю что ORM это хорошо, здорово экономит время и проч. Тут либо я сам парюсь и расставляю ограничения, пишу и оптимизирую запросы и тд, либо ORM делает это за меня. Но у меня не enterprise задача, чтобы его с собой тащить.

da horsie
06.04.2017
02:36:00
Посмотри последний видос
Там как раз о том, что фреймворки хороши для мелких проектов, а для крупных создают сложности

Max
06.04.2017
02:38:14

Java73
06.04.2017
03:13:07
А никто не пользуется tiOPF? Или паскальщиков тут сразу банят ;) ?

da horsie
06.04.2017
03:30:43

da horsie
06.04.2017
03:31:03

Java73
06.04.2017
03:32:27
Но относятся к недоверием)

da horsie
06.04.2017
03:33:32
Нет. Я вообще на пхп пишу

Java73
06.04.2017
04:00:42
Ну вот интересно, orm для создания приложений, связанных с бд, используются еще или уже что-то новое появилось?
А то может зря изучаю tiOPF

Max
06.04.2017
04:14:04
А то может зря изучаю tiOPF
А Delphi сейчас вообще целесообразно при разработке чего-либо использовать? Понятно, что на вкус и цвет, но есть ли работа, не связанная с поддержкой легаси

Java73
06.04.2017
04:28:44
Я в лазарусе работаю

da horsie
06.04.2017
04:29:46

Google

Max
06.04.2017
04:32:38

Кирилл
06.04.2017
05:30:27
В чем отличие модуля от либы?
Всем утра

Sergei
06.04.2017
05:31:02
Ну разве что детали - скажем в python модуль задаёт namespace, а в C lib - нет.

Кирилл
06.04.2017
05:31:55
Тогда откуда столько срачей на тему модулей в сpp и той же java

Sergei
06.04.2017
05:32:29
Есть детали, которые (при большом желании) можно считать "важными".
Из области "в интернете кто-то снова неправ".

Java73
06.04.2017
05:40:35
Это из той же, где "на паскалях разве кто-то пишет" наверно. Возможно даже участники те же.

Admin
ERROR: S client not available

Hell
06.04.2017
05:50:17

guga
06.04.2017
06:31:50

Кирилл
06.04.2017
06:33:47
Вот статья https://www.infoq.com/articles/modular-java-what-is-it
Утверждается "Libraries are implicitly modules"

guga
06.04.2017
06:42:18

?
06.04.2017
08:57:07
Чувак про FP vs OOP
https://www.youtube.com/watch?v=Bn132AtZLhc

Aleh
06.04.2017
09:00:37
Господа, день добрый. Вопрос про ООП в питоне: есть class App, который дергает data-storage и отдает данные интерфейсу (консоли, гую etc).
Data-storage - это пока что sqlite3, class Database (коннект к базе) и модуль models, где по классу на каждую таблицу, raw sql-запросы на get\set там же.
Вопрос - каким паттерном элегантней и проще всего организовать доступ к базе данных через App?
Готовые ORM предлагать не надо, тут задача чисто поломать себе голову. Делал бы на php\java - лепил бы фабрику, статичные методы, синглтоны, но в питоне ведь синглтоны лучше не лепить.
import datastorage
Короче модули юзать

Google

Sergei
06.04.2017
09:56:35
Кто там с питоном - сделай Dao - класс который будет сохранять и читать данные из бд, сами entity (сущности) не должны ничего знать о базе данных и способе хранения, это нарушение single responsibility principle. Они не должны себя сохранять.
Коннект к базе должен браться и закрываться на каждуй операцию. Держать всё время открытым один коннект не рекомендуется, лучше использовать коннекшн пул.

(;¬_¬)
06.04.2017
10:07:45
В теории, да
она через некоторый срок становится той же поддержкой легаси

Sergei
06.04.2017
11:05:16
Допустим есть класс Document который нужно куда нибудь напечатать, к примеру в консоль или в файл. Класс Document обладает всей необходимой информацией которая нужна чтобы напечатать этот документ, получается что Document должен печатать себя сам согласно принципу Inflrmation Expert но тут мы нарушаем приницип Single responsibility, обьект должен иметь одну ответственность. Кто какой принцип предложит нарушить?)


Владимир
06.04.2017
18:07:19
Я думаю, это зависит от того, предполагаешь ли ты дальнейшее расширение возможностей печати
Если нет - то лучше нарушить единую ответственность, а если может понадобится добавить третий\четвёртый методы вывода - лучше сделать отдельный класс отвечающий за печать документа

f4rt~
06.04.2017
18:09:55
Интерфейс документ и его реализации

finkel
06.04.2017
18:10:51
я бы сделал отдельный класс
хотя я не совсем понимаю information expert, в отличии от srp

Sergei
06.04.2017
18:17:30

Aleh
06.04.2017
18:19:35

Java73
06.04.2017
18:19:55
Шаблон стратегия дэтэктэд

Sergei
06.04.2017
18:20:10

Aleh
06.04.2017
18:20:34
да

Sergei
06.04.2017
18:22:57
Как то не очень, как по мне, более естественным выглядит вариант на uml диаграмме, зачем засовывать в документ эту функциональность, пусть даже эта функциональность будет делегирована другому классу?
Есть документ, есть принтер
В случае если в документ будет вкладываться какая то стратегия печати будет то же самое только вид сбоку

Aleh
06.04.2017
18:24:07
ваш вариант не очень тем, что вы не можете печатать разные наборы данных для разных типов документа
ну можете, но эта логика почему-то будет не в документе, хотя именно он это знает
ну и придется в документ запихать бесполезных гетеров

Sergei
06.04.2017
18:28:59
хотя я не совсем понимаю information expert, в отличии от srp
IE лучше всего применять там где есть какие то данные которые нужно посчитать, допустим чек в магазине, или результат каких то вычеслений, допустим в классе Report есть какой то массив с результатами вычеслений. Чтобы посчитать среднее, большее или сумму нельзя запрашивать у класса массив с данным и считать самому, пусть класс считает сам, когда едешь в такси то ты спрашиваешь у водителя "Сколько времени займет поездка до центра город?" а не "какая средняя скорость машины" "сколько пробок на дороге" и т.д. водитель - информационный эксперт и знает всё в этой области потому он должен отвечать на этот вопрос.