Skip to content

Conversation

@77web
Copy link

@77web 77web commented Jul 8, 2020

どのようにコーディングしましたか?

Controller→UseCase→Service→Model というレイヤーにしています。
Modelは、いつかSymfonyもDoctrineも捨てるかもしれないときにも移植できる部分として作ります。実際に他のパッケージ(社内packagist向けのプライベートパッケージ)として作ることも多いです。
ServiceまではDoctrineを知っても良いことにしています。

このコーディングのポイントを教えてください。

ビジネスロジックをDoctrine, Symfonyと疎結合に書くこと。
※ ただしこのシステムぐらいDB保存以外に何もしないシステムなら疎結合にする必要はないと判断するかも

どのようなことに注意していますか?

ビジネスロジックをDoctrine, Symfonyのクラス(レイヤー)に依存させないこと。

その他、コメントがあれば

現実の業務ではもう少しレイヤー分けを妥協することが多いです。
ModelがDoctrineに依存するのを許したり、UseCase→Service,Service→Serviceの依存時にinterfaceを挟まなかったり。
逆に言えばレイヤー分け以外の部分は基本的に妥協しません。
このクラス分けをビジネス側に許容させるために意識してコーディングスピードを激上げていると言っても過言ではありません。「中身がゴチャゴチャでもいいから動くものを速く作って」とは言わせません。

@77web 77web changed the title wip: 理想を追求していいならこうするという方法 理想を追求していいならこうするという方法 Oct 10, 2020
@77web 77web marked this pull request as ready for review October 10, 2020 15:12
@77web
Copy link
Author

77web commented Dec 4, 2020

昨日のSymfonyWorldで私と同様のアプローチの方がいて感動しました!
https://slidr.io/derrabus/dependency-injection-demystified

ただしこの方の場合UseCaseレイヤーはないです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant