CodeByZen
@CodeByZen
php, js, my/mssql, sqlite, html, css, it-consult

Классы, пространства имен, функции?

Хотелось бы спроектировать систему с использованием правильного подхода, чтобы каждый элемент системы мог взаимодействовать с другим путем непосредственного вызова методов (например).


Нашел три варианта. Классы, пространства имен и функции.

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

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

3. Пространства имен не соовсем ООП на сколько я понимаю, и я не знаю, на сколько это применимо к моей задаче, но работает хорошо. Визуально все ясно и код более-менее читабельный.


Какой вариант наиболее предпочтителен? Или есть какие-то решения до которых я не дошел?
  • Вопрос задан
  • 3597 просмотров
Решения вопроса 1
@Vampiro
Dependency injection гуглили?
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@LuciferOverLondon
Вы слишком рано начинаете всё усложнять. Вам надо сначала разобраться с ООП, тогда вам самому станет ясно, какая «архитектура» вам нужна.

Перспектива «переписывать все, поняв, что с данной архитектурой приходят какие-либо ограничения» и «что за ******* это написал?» — неизбежна. Другое дело, что, если вы будете двигаться методично, а не перескакивать к DI, не разобравшись с ООП, то вы сами увидите, почему и для чего вам нужна другая архитектура, и сами будете критично смотреть на свой и чужой код.

Вы ещё не понимаете смысла классов — это ясно из того, что вы вообще рассматриваете вариант «функции и неймспейсы».
Сделайте сначала самый простой вариант: разделяйте код по смыслу на классы и вызывайте их напрямую — либо создавая объекты там, где они используются, либо передавая через аргументы и сеттеры. Тогда (я надеюсь) вы разберетесь, зачем нужны классы и, со временем, — для чего придуманы DI и прочее. Ибо каждая методология в кодинге нужна для решения конкретной проблемы, а если вы не знаете проблему, то не сможете правильно применять технологию.
Ответ написан
Комментировать
@Vampiro
ок, еще раз. Вот вы создали такую штуку. Напичкали в нее кучу классов. Скажем… 15. Теперь вы в коде пишите:
class A {
    callMethod('foo',|
}

Вот вы набрали функцию, и набрали даже неймспейс. Курсор у вас стоит после запятой. Что дальше? Дальше вам придется вспоминать название функции или лезть в документацию по утилите. Поскольку никакая IDE не сможет разрезолвить что вам сейчас предложить. И как быть с количеством параметров ей тоже будет не ясно. И еще вы не получите «ленивую загрузку» сходу, как это было бы при нормальной реализации.
Если в вашем варианте есть хоть один положительный момент — подскажите, плиз. Я, наверное, слеп(
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы