Организация кода. Филосовские размышления

Обсуждаем, как правильно строить приложения
Ответить
Аватара пользователя
delvin
Сообщения: 85
Зарегистрирован: 2009.11.13, 15:29

Организация кода. Филосовские размышления

Сообщение delvin » 2018.07.27, 00:04

Сейчас пришло время переписать пару проектов. Один из которых на коленях за несколько недель был написан на yii1 (портал/соцсеть) около 5 лет назад. Второй (магазин) - жуткий отпрыск opencart и yii1.
В общем, оба проекта выглядят как: авокадо трахнуло сморщенное авокадо. И внесение изменений вызывает боль и страдания.

Решил буду организовывать код и неймспейсы примерно так:

Код: Выделить всё

App
-Module1
--config
--doc
--src
---SomeFolder
--test
-ModuleN
--config
--doc
--src
---SomeFolder
--test
где неймспейсы будут такими

Код: Выделить всё

App/Module1/SomeFolder
Обычно раскидываю классы в директории или по паттернам или по смыслу. Потом вспомнил, что получалось иногда слишком много директорий (под два десятка).
Думал, как это можно разбить еще увеличив вложенность и пришла мысль дробить по принципу, который принят в ddd. Разделять логику, инфраструктуру, юи и т.п.

По пути домой меня озадачил вопрос. Если этот код кто-нибудь другой увидит, не закидает ли меня грязными тряпками, за такое разделение :)

А как вы организуете свой код?

anton_z
Сообщения: 354
Зарегистрирован: 2017.01.15, 15:01

Re: Организация кода. Филосовские размышления

Сообщение anton_z » 2018.07.27, 02:15

delvin писал(а):
2018.07.27, 00:04

Думал, как это можно разбить еще увеличив вложенность и пришла мысль дробить по принципу, который принят в ddd. Разделять логику, инфраструктуру, юи и т.п.
Я бы точно не стал совать DDD в старый проект, просто переписал бы, стараясь переиспользовать то хорошее, что есть в проекте. Структура и паттерны из DDD не панацея, надо в первую очередь решать задачу, продумывать логику работы системы, использовать сильные стороны тех инструментов, на которых написан проект. Я бы искал свой подход для каждого отдельного случая, а не пытался "лечить" проект DDD. Для начала можно приемочными тестами с codeception все покрыть. Этому поддается любой php-проект, как бы криво он не был написан. А уже затем можно начинать рефакторинг.

А по структуре - у вас же yii, я бы на вашем месте ничего не придумывал, а использовал структуру, предлагаемую yii. Считаю, что это будет наименее болезненный вариант. yii1 нормально с пространствами имен работает, кстати.

Аватара пользователя
delvin
Сообщения: 85
Зарегистрирован: 2009.11.13, 15:29

Re: Организация кода. Филосовские размышления

Сообщение delvin » 2018.07.27, 02:24

я не предполагаю использовать ddd - там это избыточно. Как логически лучше организовать неймспейсы.
использовать сильные стороны тех инструментов, на которых написаны проекты
там такого нет, надо переписывать именно с нуля. Чего стоят очереди на лок файлах с таймингом.
Тут речь не об архитектуре сейчас, а скорее об эстетике.
А по структуре - у вас же yii, я бы на вашем месте ничего не придумывал
был yii планирую на zend expressive очередную итерацию делать.

anton_z
Сообщения: 354
Зарегистрирован: 2017.01.15, 15:01

Re: Организация кода. Филосовские размышления

Сообщение anton_z » 2018.07.27, 02:51

delvin писал(а):
2018.07.27, 02:24
был yii планирую на zend expressive очередную итерацию делать.
Тогда это не итерация, а почти новый проект, сил и времени не жалко?). А почему именно ZE? Можно и yii2 взять, идиоматически он идентичен yii1, легче отрефакторится.

Аватара пользователя
yiijeka
Сообщения: 3034
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь

Re: Организация кода. Филосовские размышления

Сообщение yiijeka » 2018.07.27, 07:59

Код: Выделить всё

- applications
---app1 - сюда суём весь старый проект.

- business 
---src
---tests

- domain
--- src
--- tests

- extra
--- documentation

- infrastructure
--- libs
--- vendors
И начинаем писать новые базовые вещи в domain, реализовывать новые требования проекта в bussines и подменять отображение в applications использую bussunes-domain. При таком подходе вообще фиолетово, что за фремворк используется.

Ответить