私は仕事中のプロジェクトのサブシステムである非常に複雑なコードをリファクタリングしています。このコードの私の調査の一部は、それが信じられないほど複雑で、いくつかのコアビジネスロジックに応じて多くの入力、中間値、および出力を含んでいます。行列代数設計分解
私は、このコードをもっと簡単に保守するだけでなく、より速く実行するために、このコードを再設計したいので、まず始めに、それぞれのパラメータとそれぞれの依存関係を見てみようとしています。これは非常に大きくて絡み合ったグラフにつながり、このグラフを単純化するための仕組みが必要です。
私はSOAデザインに関する「Matrix Design Decomposition」というテクニックに出くわしました。これは、出力マトリクスと入力に依存するものを使用し、行列代数の何らかの形を適用し、ビジネスプロセスを生成することができますこれらの依存関係の図。
私は、http://www.designdecomposition.com/で利用できるWebツールがあることを知っていますが、入力/出力の依存関係の数には限りがあります。私はこのツールのアルゴリズムのソースを探してみました(サイズ制限なしで自分で実装しようと試みることができました)。しかし、私は運がなかった。
誰も私が使用できる同様の技術を知っていますか?現在、私も...依存関係行列を取り、進化はシンプルなワークフローを考え出すことができるかどうかを確認するために、いくつかの遺伝的アルゴリズムを適用する
乾杯、
Aidosを検討しています
EDIT:
I
元のコードは、ユーザーが操作を実行するたびにすべての値(約60)を計算するシステム用に作成されました(特定のプロパティの追加、削除または変更)。アイテム)。このコードは10年以上前に書かれたものであり、時代の兆しをはっきりと示しています。他のものはシステムに複雑な計算を追加しましたが、現在は完全に不合理なパフォーマンスを得ています。ユーザーの操作から計算を切り離し、値を「再計算」するためのボタンを提供することが決定されました。
問題は非常に多く計算が行われており、必要なデータがすべて計算に使用できるという前提に基づいています。私が直面している計算を再実装しようとするとこの計算に依存する計算とは異なる計算結果が得られていないため、問題が発生します。
ここでは、マトリックス分解アプローチを使用したいと考えています。 MDアプローチでは、すべての入力と出力を指定でき、すべての出力を生成するために使用できる「最も単純な」ワークフローが得られます。
この「ワークフロー」を使用して、例外を生成せずに同じ結果を得るために実行する必要のある計算の優先順位を知ることができます。また、計算システムのどの部分を並列化できるのか、そしてフォークとジョインポイントがどこになるのかがわかります(私はその部分についてまだ心配しません)。現時点で私が持っているのは、どこに始めるべきか分かりませんが、そこにはたくさんの依存関係がある非常に大きな行列です。
私はもう少し私のコメントから詳しく説明します:私は、実際のプログラムでは、EAプロセスからソリューションを使用したくない
。依存行列を取り出し、それを手動でコード化するモジュールに分解したい - これは単なる設計支援であり、これらのモジュールの入出力が何であるかに興味があります。基本的には、これらの計算の間の複雑な相互依存関係、および優先順位の考え方を表します。
私はAにBとCが必要です。DにはAとEが必要です。FにはB、AとEが必要です。問題空間を複雑な依存関係のセットから効果的に "ワークフロー"より良い理解を得るために。私がこの理解を得たら、私は人間が読めるより優れた設計/実装を考え出すことができるので、A、C、D、そしてFを計算する必要があることが分かります。
-
私は、マトリックスベースの分解の前にリンクしているウェブサイトを見れば、私は何を考えているのか理解できるはずです。
私はこのテキストをもう少し詳しく解説しました私はやっているし、なぜ。 – Aidos