web-dev-qa-db-ja.com

クリーンアーキテクチャ-「データベース駆動型」から「データベースに依存しない」への移行方法

大規模システム用のクリーンなアーキテクチャーを作成する上で、いくつかの明快さと、できればいくつかのアドバイスを探しています。私の会社の「Webソリューション」は+ -10年前のもので、私の仕事はそれを書き直すことです。数千のASPクラシックページ全体に書き込まれ、一貫性がまったくない独自のSQLクエリがすべて含まれています(製品が1つの検索に表示され、別の検索に表示されない場合があるため、メンテナンス/デバッグに膨大な時間を費やしてこれらを修正しています)。率直に言って、コードのもつれた結び目を、処理するのが最悪の悪夢からまっすぐに抜け出します。

昨日まで、私は再開発と私の一貫性の問題を解決するためのかなり率直な計画を立てていました...

  1. ユーザーケースを選択します。
  2. 1つまたは2つのストアドプロシージャ/ SQL関数を記述して、選択したケースのデータフローを制御します(ユーザーの保存、ユーザーの追加、ユーザーの編集など)。
  3. 上記のprocs/functionsを使用するには、現在のシステムの関連するASPページを更新します。

最終目標-開発中に非常に必要な安定性と整合性を実現しながら、完全にデータベース駆動型のアプリケーションを実現します。これが達成されたら、私は(同じデータベースプロシージャを使用して)Web APIを記述し、Web API、モバイルアプリ、およびこのAPIの上に必要なその他のものを実装することを計画していました。これは私にとってかなりまともな解決策であるように思われましたが、その欠陥があっても、現在作業しているものよりも指数関数的に優れています。

それから私は偶然出会った クリーン建築へのボブおじさんガイド

私はコンセプトを理解し、それは素晴らしいようです。現在の立場からは真実であるにはあまりにも良いですが、深く掘り下げていくと、「これは素晴らしいです!では、どのように実装するのですか?」ガイドが要求するルールの1つは、アプリケーションが完全にデータベースに依存しないことです。つまり、私が計画したことは、絶対にうまくいきません。これは、最初から完全に外国の概念であるという冷酷な事実を認めなければなりませんでしたアプリケーションの中心をプログラミングすることを学び始めた日はDBでした。そのため、思考プロセスを調整してそれをそのように扱わないことは非常に困難です。

私はもう少し読んで、私が正しい軌道に乗っているかどうか、またはよりクリーンでよりクリーンなアプローチがあるかどうかについてのフィードバックを期待していました。

PHPは、ほとんどのWebアプリケーションで使用する言語の第一歩です。これが、私の理論が実装される可能性が最も高い言語です...

  1. システムをコアユースケースとエンティティに分解します。これらのそれぞれに独立したオブジェクトを書き込みます。
  2. データベースから抽象化するデータインターフェースモデルを記述します(データベースは現在、ユースケースとエンティティロジックの主要なソースであるため、上記のオブジェクトはおそらく現在のテーブルに基づいています)。これにより、DBを1か所に関連付けることができ、ストアドプロシージャ/ SQL関数を実装した場合と同じ整合性と一貫性の結果を得ることができますが、抽象化を変更する必要があるため、アプリケーションは「データベースに依存しません」。プロバイダーをSQL ServerからOracleに変更した場合のレイヤー。これは私の不確実性が入り込むところです、これは良いアプローチですか?データソースを変更することはほとんどありませんが、誰が知っていますか?また、ガイドのアーキテクチャに従う場合は、できる限り厳密に実行したいと考えています。この手順が正しく実装されていないと、データベースレイヤーがゆっくりとプライマリアプリケーションモデルに浸透し始めるため、目的が達成されないことを知っています。
  3. 手順1で記述したコアオブジェクトを使用してWeb APIを実装します。
  4. 必要なあらゆるプラットフォームにAPI駆動のUIを実装します。

私はエッセイをお詫び申し上げますが、これが私に最良のガイダンスを得るのに役立つことを期待して、できるだけ明確にしたかったのです。私は本当に学びたいし、いつかこのタイプのアーキテクチャに非常に熟練していると思います。その構造とコンセプトに関するオンライン情報はたくさんありますが、それを実装する方法、または考え方を変える方法についてはほとんどありません。アプリケーションの絶対的なコアであるデータベースに慣れているときにアプリケーションを開発するとき。

どんなフィードバックも高く評価され、高く評価されます。ありがとう

6
kurt

まず第一に、私はPHPのクリーンなアーキテクチャーには取り組みません。クリーンアーキテクチャの主な目的の1つは、ユーザーインターフェイスを本質的にアプリケーションのプラグインと見なすことを可能にし、UIの種類を簡単に変更できるようにすることです。 PHPを使用すると、本質的にWebベースのインターフェースに制限されます。よりアーキテクチャに依存しない言語に精通している場合は、代わりにそれを選択します。

その後、まず、テキストユーザーインターフェイスを使用し、データベースを使用しない1つまたは2つのユースケースの簡単な実装を開発します。コレクションを使用してビジネスオブジェクトを格納するだけです。それがどのように機能するかに満足したら、元のバージョンが機能するようにユーザーインターフェイスとデータベースレイヤーをアタッチする方法を試してみることができます。いったん機能するようになったら、残りはかなり簡単になるはずです。

検索するいくつかの便利なもの:

  • 最終的に使用する言語のMVCフレームワーク。 MVC(またはMVP)はクリーンなアプリケーションのUIレイヤーとしてうまく機能します

  • データアクセスのリポジトリパターン-これはおそらく、データアクセス層をアプリケーション層から分離する最良の方法です。

  • 六角形のアーキテクチャ-これは、ボブおじさんがクリーンアーキテクチャと呼ぶ同じ概念の別名です。これを検索するのに役立つリソースを見つけることができます。

3
Jules