先ほど、yml、プロパティ、xml、json、インターフェイスの形式でプロセス モデルの登録をサポートする必要があると述べました。 , 形式を使用する必要があります 解析ロジックは独立して処理されます 拡張開発と変更クロージャの原則を反映するために , まずインターフェイスのセットを定義し、次に対応する実装ロジックを提供しますファクトリ モデルを使用します。ここでのファクトリは、ユーザーがインターフェイスを通じて特定の実装を呼び出します。ここでの実装はプロバイダであり、戦略パターンのセットでもあります。
プロセスの読み込みファクトリー モードを使用する必要があることは明らかです。 # #外部拡張開発は変更のため終了しています。ノードを追加するとき、他のコード ロジックに触れる必要はありません。ファクトリ関数にノード パーサーを追加するだけで済みます。同時に、Map コレクションを定義します。ここでは、ファクトリ関数をロードするときに解析オブジェクトを使用します。解析するたびにパーサーを作成する代わりに、不要なメモリを削減するために作成します。コードは次のとおりです:
<code>public class NodeComponentFactory {<br><br> private final static Map<string> cacheParser = new HashMap();<br><br> static {<br> cacheParser.put(NodeParserEnum.method.name(),new MethodNodeComponent());<br> cacheParser.put(NodeParserEnum.bean.name(),new BeanNodeComponent());<br> cacheParser.put(NodeParserEnum.condition.name(),new ConditionNodeComponent());<br> cacheParser.put(NodeParserEnum.service.name(),new ServiceNodeComponent());<br> cacheParser.put(NodeParserEnum.subflow.name(),new SubFlowNodeComponent());<br> }<br><br> public static NodeParser getNodeInstance(String nodeName){<br> return cacheParser.get(nodeName);<br> }<br>}<br></string></code>
When we find各ノードの解析タイプはパーサー インターフェイスを実装する必要があり、各ノードには同様の手順があるため、ここでは抽象ファクトリーの使用を検討する必要があり、これは
Dependency Inversion の設計原則にも準拠しています。依存関係インターフェイスを介して次のモジュールが抽象化クラスを継承し、インターフェイス呼び出しを行うために Strategy Pattern も使用します。実装の論理プロセスでは、パラメーターの初期化など、多くの手順が繰り返されることがわかります。レコードを実行するため、繰り返しのコンテンツを抽象クラスに置きます。テンプレート モードを介して、プロセス ノードは解析レベルのみに焦点を当てます。<code>public abstract class AbstractNodeComponent implements NodeParser{<br><br> public Map<string node> nodeMap;<br><br><br> /**<br> * 初始化参数<br> * @param inputUrl<br> * @param baseInput<br> * @return<br> */<br> public BaseInput initInput(String inputUrl, BaseInput baseInput){<br> BaseInput baseInputTarget = ClassUtil.newInstance(inputUrl, BaseInput.class);<br> BeanUtils.copyProperties(baseInput,baseInputTarget);<br> return baseInputTarget;<br> }<br><br><br> /**<br> * 解析节点信息<br> * @param node 节点信息<br> * @param baseInput 请求参数<br> * @param baseTemp 临时上下文<br> * @return<br> */<br> public BaseOutput parserNode(Node node, BaseInput baseInput, BaseTemp baseTemp){<br> baseTemp.setFlowRecord(baseTemp.getFlowRecord().append(FlowConstants.NODEKEY+FlowConstants.NODE+FlowConstants.COLON+node.getId()));<br> BaseOutput baseOutput = parser(node, baseInput, baseTemp);<br> return baseOutput;<br> };<br><br> @Override<br> public void setNodeMap(Map<string node> nodeMap) {<br> this.nodeMap = nodeMap;<br> }<br><br> @Override<br> public abstract BaseOutput parser(Node node, BaseInput baseInput, BaseTemp baseTemp);<br><br>}</string></string></code>
を体現する必要があります。プロセス実行の各プロセスで柔軟に組み合わせることができます; 以下のフローチャートでは、いくつかのコンポーネントを見ると、最初のコンポーネントはプロセスを統合して実行するための入り口であり、2 か所で使用されます。 、2番目はサブプロセス実行の入り口、2番目のコンポーネントは管理コンポーネントを均一にロードするノードであり、前述のファクトリクラスです、3番目は各コンポーネント独自のパーサーであり、操作の実装に使用されます設計プロセスでは、プロセス、管理、およびノード間の関係を知る必要があります。コンポーネント間の境界により結合が軽減されるため、異なるコンポーネントを柔軟に構成できます。
以上がJavaでプロセスオーケストレーションフレームワークを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。