BaNdErOzZz

BaNdErOzZz

Пикабушник
47К рейтинг 10 подписчиков 37 подписок 85 постов 16 в горячем
Награды:
10 лет на Пикабу самый комментируемый пост недели

Опрос по темам.

Привет, сообщество !

Опрос по темам.

Чтобы не только тешить себя постами, которые интересны мне, хотелось бы от нынешних участников сообщества увидеть предложения по темам, которые интересны, в первую очередь, вам.

Пишите, о чем хотели бы узнать лучше, и я постараюсь написать об этом. Так будет полезно и для самого сообщество, и для вас лично.


Всем удачи !

Показать полностью
2

[Doctrine] BEST PRACTICES - 1

Замечательный человек Marco Pivetta, который больше известен под ником Ocramius и который участвует в развитии Doctrine ORM, составил презентацию, в которой описал лучшие практики, которых следует придерживаться при работе с Doctrine.

вот ссыль

На официальном сайте Doctrine так же присутствует раздел, под названием Best practices , но он очень мал.

1. Общие правила.

Как правильно при первом знакомстве с Doctrine все сущности, которые мы создаем являются по сути обычными POCO объектами , которые на каждое свойство имеют по get\set методу и не имеют конкретного поведения.

"Сущности должны работать без ORM", означает то, что вы должны абстрагировать ваши сущности от логики ORM, т.е. если вы вдруг захотите сменить Doctrine на Propel, вам не пришлось бы менять код в бизнес-логике. Однако тут возникают ограничения, накладываемые ORM, например коллекции в Doctrine - "ArrayCollection" которые используются внутри сущностей, для работы со связями.

"Сущности должны работать без БД" - пункт, который в принципе и так исполняем, так как вся логика работы с БД у нас инкапсулируется в самой ORM. Исключение составляет разве, что Active Record сущности с sql внутри.

"Сущности являются отображением доменной логики вашего приложения" - доменная логика - это часть подхода в DDD методологии, сформулированной Эвансом. Соответственно, ваши сущности не должны быть пустыми болванками, с двумя методами на свойство. Ваши сущности, в первую очередь, должны обладать поведением.

При проектировании вашего приложения, рекомендуется пользоваться code-first подходом,  когда вы сперва проектируете ваши сущности и взаимодействие между ними, а после уже занимаетесь проектированием хранилища и тем, каким образом помещать в него данные. В ходе работы может появиться необходимость в нескольких базах данных, или в разделении хранилищ с хранением различных кусков данных единой сущности. В итоге ваши сущности не должно волновать, каким образом вы организуете персистентный слой, ваши сущности должны быть заняты бизнес логикой приложения.

2. Придайте Entity осмысленности.

Типичная сущность:

При таком подходе наша Entity напоминает больше ассоциативный массив, нежели полноценный объект. Чтобы решить эту проблему, данному классу нужно придать немного больше информативности:

Таким образом мы придали сущности более осмысленное, в рамках доменной логики, поведение, а так же защитили его от неконтролируемых изменений. Начинайте проектировать свои сущности на уровне интерфейса, так вы сможете абстрагироваться от детализации и сосредоточиться над общей структурой ваших сущностей и их взаимодействия.

3. Инкапсулируйте взаимодействие с коллекцией внутри Entity.

Если ваша сущность имеет внутри себя коллекцию зависимых объектов, с которыми вы хотите работать, то лучшим образом это будет делать через сам класс сущности, вместо того, чтобы выносить коллекции из сущности куда-то еще.

Такой подход является следствием создания сущностей-болванок, по этому оптимальным вариантом будет некоторые операции размещать внутри методов самой сущности. В данном случае - CRUD операции с коллекциями.

Конечно в простых примерах взаимодействие с коллекциями кажется таким же простым. Однако в реальном приложении на сцену выходит множество факторов и внешних зависимостей, и данную логику часто приходится размещать, как раз-таки, во внешних сервисах бизнес уровня приложения.

4.Ваши сущности всегда должны находится в валидном состоянии.

Как касательно самих типов данных, чтобы в поле для целого значения не прилетела строка, например, так и касательно самих бизнес-правил, чтобы email был валидным, а пароль не меньше 3 и т.д. Вы должны всегда доверять сущности и быть в ней уверены. Однако не следует помещать в методы сущности комплексные валидационные правила, которые работают с данными пользователя. У вас всегда должны быть слои взаимодействия. Валидацию самой пользовательской формы отдавайте валидаторам - это может быть сервис, или input-фильтры, как в ZF2, или формы, как в SF2, или любые другие инструменты.

5.Используйте конструктор.

Это правильно тоже касается валидации. Ваши сущности не должны существовать без жизненноважных зависимостей. Например: профиль пользователя не может существовать без самого пользователя, по этому нужно запретить создание профиля, без передачи ему в конструктор сущности User. Если посмотреть с другой стороны, то очевидно, что при создании пользователя желательно создавать и профиль для него, это можно сделать в конструкторе сущности User, тем самым обеспечить их связь на этапе создания, без лишних телодвижений с сеттерами и проверками на существование.

6. Не рекомендуется использовать классы из уровня выше, в классах, уровня ниже.

Т.е. не желательно использовать в сущностях - сервисы, репозитории и другие классы, которые для своей работы сами используют сущности и соответственно находятся уровнем выше над ними.

Показать полностью 4
2149

Трагедия в Минской области: шесть человек, включая работников МЧС, погибли, спустившись в канализационный колодец

ЧП случилось вчера в деревне Каменка Крупского района, сообщает Следственный комитет. Примерно в 21:00 житель Крупского района спустился в канализационный колодец глубиной около 6 метров рядом со своим домом для его прочистки. В ходе работы мужчина потерял сознание и упал на дно. Оказать ему помощь пытались соседи: трое мужчин поочередно спускались в колодец и, теряя сознание, падали вниз.


В МЧС сообщение о происшествии поступило в 21:54. Для оказания помощи пострадавшим на место прибыли спасатели. Они извлекли тела четверых мужчин без признаков жизни из канализационного колодца. Медицинские работники констатировали их смерть.

При проведении спасательных работ двое сотрудников МЧС получили отравление парами скопившихся в колодце газов и были госпитализированы. Позже, не приходя в сознание, они скончались в учреждении здравоохранения.

Как оказалось, рискуя жизнью, вниз спустились работники Крупского районного отдела по чрезвычайным ситуациям лейтенант внутренней службы Александр Шиманский и старшина внутренней службы Андрей Слиборский. Министерство по чрезвычайным ситуациям выражает глубокие соболезнования родным и близким погибших.


На место происшествия выбывала следственно-оперативная группа Главного следственного управления, задействованы криминалисты центрального аппарата Следственного комитета и передвижная криминалистическая лаборатория ведомства.

Следователи осуществили осмотры тел погибших, назначены судебно-медицинские экспертизы с целью установления точной причины смерти. Проведен осмотр места происшествия с участием специалистов Государственного комитета судебных экспертиз, МЧС, милиции. Изъяты образцы веществ, содержащихся в колодце, осуществлен забор воздуха для проведения химических исследований.


Работа по выяснению всех обстоятельств трагедии продолжается во взаимодействии со всеми службами. Расследование находится на личном контроле председателя Следственного комитета.


Сосед погибшего мужчины видел все своими глазами, но помочь не сумел. Он видел, как вчера погибло шесть человек. Заговорить о произошедшем ему удается не сразу: красные пустые глаза, кажется, никак не реагируют на слова.

— Вот тут лежал один, а вот здесь второй, спасателей сюда вытянули, — показывает на тротуар Валерий Григорьевич. — У меня же точно такой же колодец дома. Но я всегда машину вызываю, чтобы откатали, а сосед решил сам прочистить… Все эти колодцы — самоделки. Мы же сами их копали когда-то.


Он вчера вечером увидел, что забилась канализация. Сам колодец метров шесть глубиной, но у него лестница до самого дна не достает. Он взял трос, хотел спуститься, но не успел даже до дна достать. Его жена начала кричать, звать на помощь. Сначала один сосед увидел, тоже сразу рухнул туда. За ним еще один… Рвался парень молодой, его не пускали, держали, говорили, что нельзя туда лезть. Сначала вроде уговорили, а потом он все-таки вырвался и полез туда.


Я искал, чем его достать, обошел тут все, но ничего не нашел. «МЧС-никам» говорил — не лезьте туда! Нечего без респиратора туда спускаться, уже четыре человека там лежат, но он не захотел меня слушать, рванул туда не думая. Молодые же все парни совсем, только один пенсионер.


Источники:

Происшествие - https://realt.onliner.by/2016/06/29/chp-krupsk

Реакция местных жителей - https://realt.onliner.by/2016/06/29/kolodcy

Показать полностью 3

Программирование на PHP

Хотелось бы создать сообщество программистов на PHP.

Так как тема языков программирования - узкоспециализированная, то, соответственно, посты по ним в горячем не увидишь (либо увидишь, но очень редко), однако, я думаю, на пикабу сидит очень много веб-программистов, либо людей, так или иначе интересующимися этим языком программирования.

Каждый день появляются новые статьи из мира PHP и проходят мимо нас, возможно вы прочитали, что-то интересно, или у вас есть свой личный опыт, поделиться которым хотелось бы, но вы не уверены, что на хабре вас примут, а свой блог вы пока не завели - тогда будет отличной идеей написать свой пост сюда !

Давайте делиться интересными событиями и статьями из мира PHP и WEB-разработки !

*жаль, что в текстовом редакторе пикабу нет форматирования кода )

Программирование на PHP

Политическая аналитика

Предлагаю создать сообщество политической аналитики, в которое будут добавляться посты политической тематики с премодерацией. Сообщество необходимо для группировки в одном месте содержательных статей и отсеивания их от вбросов, демотиваторов и другой развлекательной информации.

Приветствуется дискуссия и различные взгляды на ситуацию. По одному тегу "политика" очень много ерунды и дубликатов, невозможно фильтровать.

Отличная работа, все прочитано!