lt1

賢くならないでください -stitcher.io

10 年前、私はこれまでで最も美しく、賢く、過剰に設計されたコードを書きました。 私はスタートアップ向けの REST API を構築していましたが、コントローラー間で多くの繰り返しが行われていることを発見しました。同じ種類のアクションを構築し、コードを何度もコピーしていました。 そこで私は解決策を思いつきました。 CRUDコントローラー™

これは、Doctrine (当時私が使用していた ORM) と統合された、美しく複雑な抽象クラスでした。 これには、エンティティだけでなく子に対しても考えられるすべての CRUD 操作があり、多くの関係があります。 自動概要、フィルタリング、ページネーション、検証、データの永続化、ルーティングなどがありました。

そして、私がしなければならなかった唯一のことは、私の素晴らしいコントローラーを拡張して、新しいコントローラーを作成することでした。 CRUDコントローラー™、エンティティクラスを提供して完了です。

class TimesheetController extends CRUDController
{
    public function getEntity(): string
    {
        return Timesheet::class;
    }
}

とても盛り上がりました!

もちろん例外はありますが、例外も現れ始めました。 プログラミング的なものではなく、ビジネス的なものです。 いくつかの コントローラーがやらなければならなかった いくつかの 物事は少し異なります。 最初は小さなことでした。異なる URL スキーム、異なる種類の検証でした。 しかしすぐに、入れ子になったエンティティや複雑なフィルタリングのサポートなど、状況はますます複雑になってきました。

そして若い私は? ただ続けました。 ことわざのノブとプルを私の抽象クラスに追加しました (これは、 セット これまでにクラスの数)。

結局、私はモンスターを作成しました。 そして、皮肉なことに、単にコントローラー間でコードを何度もコピーするよりも時間がかかりました。 その上、私はスタートアップを辞めようとしていたのですが、50 個を超えるコントローラーが実際にどのように機能するのか誰も理解していませんでした。

理解していると思われるかもしれませんが、はっきりさせておきますが、それがどれだけ効果があるのか​​、私にはまったくわかりませんでした。

はい、私は適切な解決策、つまりクラス ジェネレーターを見つけることができませんでした。これにより、手動でコードを再度コピーする必要がなくなります。 当時、それは実際に存在していました。私はそれについて知らなかっただけで、誰も教えてくれませんでした。そして、特定の道を歩み始めたときに自分自身に疑問を持てるほど私は賢くありませんでした。

これは非常に典型的な例なので、ご存知の方も多いでしょう。 ちなみに、私のコーディングスキルが悪かったわけではありません。 いいえ、私は自分自身に十分に疑問を持たず、内省に欠け、自分の考えを批判的に見ることができませんでした。

見せてあげられたらいいのに CRUDコントローラー™のソースコード。 しかし、残念ながらもうアクセスできません。 幸いなことに、その記憶はまだ残っています。 そして、それは私が抽象化と複雑化の道を進むときによく思い出す記憶です。 多くの場合、それは私を引き留め、より良い解決策を探すのに十分です。

tpyoに気づきましたか? PR を送信して修正できます。 このブログで起こっていることについて最新の情報を入手したい場合は、 私のメーリングリストに登録してください: [email protected] に電子メールを送信してください。リストに追加させていただきます。

次の投稿
PHP を使用して手続き的に生成されたゲームを構築する
前の投稿
停電後にインターネットをリセットする方法

ノート:

AZ: 動物の世界、ペット、ペット、野生の自然に関するカテゴリー記事…
SP:スポーツカテゴリー。
New vs Ne: ニュースコラム。
Te: テクノロジー カテゴリ。
Gt:エンターテインメントカテゴリー。
Bt: 占い、星占い、超常現象、超常現象。
Ta:人生コラム。