Хорошо ли продуманные имена методов / функций создают DSL? - PullRequest
1 голос
/ 11 февраля 2009

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

Вы знаете, поэтому легко понять, что означает следующее

if (a.isSubReportOf(b) || b.isSubReportOf(a)) {
    // do stuff
}

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

Я знаю, что иногда люди думают, что во всей этой DSL есть что-то особенное - мы постоянно создаем их в коде?

Ответы [ 4 ]

2 голосов
/ 11 февраля 2009

Я думаю, что вы имеете в виду то, что Мартин Фаулер (и, возможно, другие) называют Внутренним DSL. Прочитайте это .

1 голос
/ 11 февраля 2009

Можете ли вы заменить одно на другое в достаточно сложной или простой ситуации? Да

Они одинаковые? Совсем нет.

У каждого есть свои плюсы и минусы, и все зависит от того, что нужно. Если вам нужно, чтобы его можно было изменять во время выполнения, то использование функции на скомпилированном языке может оказаться не лучшим решением (хотя это все еще возможно), поскольку оно будет слишком тяжелым для ваших нужд.

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

Кроме того, достаточно простой DSL может быть легко проанализирован и отредактирован другой программой. В конце концов, вы создали синтаксис и инкапсулировали его в библиотеку, верно?

В вашем примере выше:

a.isSubReportOf(b) || b.isSubReportOf(a)

еще сложнее понять мысленно, чем сказать:

a <-> b 
1 голос
/ 11 февраля 2009

Это зависит от вашего определения DSL, но я бы сказал, что да. DDD это все о создании абстракций, которые позволяют вам иметь вездесущий язык и рассуждать о концепциях на более высоком уровне. Некоторые могут утверждать, что это не DSL как таковой, но более важный вопрос заключается в том, является ли код подобным рассуждениям о домене?

Я бы сказал, да, и вот что действительно имеет значение.

1 голос
/ 11 февраля 2009

Вы можете поочередно спросить, следует ли заменять DSL на хорошо продуманные имена классов, переменных и методов. Я всегда приходил связывать это с Кентом Беком, потому что он всегда был сторонником «написания кода, который читается как поэзия».

Вы изобретаете словарь домена, превращая грамматику бизнес-операций в объекты, методы и переменные. Звучит DSL'ish для меня;)

...