プロセスプログラミング
プロセスプログラミングは多くのビジネスフレームワークで実現されています.
Tinyフレームワーク構築者は,フロープログラミングと一般的なプログラミング開発には,それぞれ応用シーンと優位性があると考えている.
プログラミング開発は、プログラマーがより大きな自由度を持っているのは、もちろん、その大きな自由度によってプロジェクトの進捗、品質面に大きな不確実性をもたらし、将来のメンテナンス面にも大きな穴を掘る可能性があります.
プロセスプログラミングは、開発者にとって大きな制限があります.つまり、すでに開発されたコンポーネントで開発したり、自分のコンポーネントを拡張したりして開発するしかありません.開発過程はもちろん制限されており、プロジェクトの初期には一定の開発効率の低下をもたらす可能性があるが、最後のメンテナンスコストの面では比較的大きな節約があり、もちろん、その最大の非難はいくつかの機能を実現する際に不便である.また,プログラマーは,プロセス編成型開発を長時間使用すると開発能力が低下し,ボイコットされると考えている.
編成式プログラミングが後期メンテナンスに便利であるため,プロセス編成式開発方式には実際の生存空間がある.もちろん、Tinyフレームワークが提供するプロセス編成式フレームワークは、一般的なプロセス編成開発方式とは異なる特性を提供する.
オブジェクト向けプロパティのプロセス編成開始モデルを十分にサポート
まず、簡単な例から見てみましょう.
コンポーネントhelloWorldComponentのソースコードは次のとおりです.
上のコードから分かるように、実はその論理は非常に簡単です.2つのカスタムプロパティが用意されています.1つはname、1つはresultKeyです.最後にexecuteメソッドでは、その実装ロジックから、「Hello」に入力した名前を付けて、環境変数のresultKeyに置いて戻ります.
プロセスコンポーネントのインタフェースも、以下のように簡単です.
次に、このプロセスを呼び出す方法を示します.a.デフォルトの開始ノードで実行を開始します.
より包括的なプロセス構成を参照してください.
id,一意に1つのプロセスを決定する
privateContext、trueの場合、プロセスでcontextを個別に申請します.そうしないと、呼び出し元のcontextを共有し、環境変数の競合問題を効果的に回避できます.
extend-flow-id、継承の流れid、この継承idは非常に強力な機能で、後で詳しく説明します
バージョン番号は、同じidのプロセスに複数のバージョンが存在し、アクセス時にバージョンを指定しない場合はデフォルトで最新バージョンが使用されます.
name,titleは英語,中国語名を説明するのに用いられ,理解しやすいだけである.
default-node-idは、デフォルトの実行ノード、すなわちコンポーネントの実行が完了した場合、そのアイテム値が次の処理ノードを指定していない場合にデフォルトのノードを実行することを示します.
begin-node-id、開始ノード
end-node-id、終了ノード
指定しない場合、begin-node-idのデフォルトはbegin、end-node-idのデフォルトはend
nodeノード:idは指定され、1つのプロセスでidが一意である必要があります.
コンポーネントノード
class-nameは、組織実装クラス名を指定するために使用されます.
propertiesはコンポーネントのプロパティリストです
propertyのnameとvalueはコンポーネントの属性の値で、value、ここでは文字列が伝わっていますが、実際には処理が非常に柔軟で、後で紹介します.
next-nodesとは、実行結果に基づいて後続処理を行うルールである.
next-node、具体的なルール、component-result、一致項目、正規表現をサポートし、ノード内のコンポーネントの実行結果を一致させ、一致に成功すればこのルールの次のノードを実行します.
Exception-typeは例外のクラス名です.例外が発生し、ここで定義したタイプと一致する場合は、このルールの次のノードを実行します.
継承について
前回継承といえば、extend-flow-idプロパティで指定すれば、プロセス継承は非常に簡単です.継承はマルチ継承をサポートしません.すなわち、プロセスは1つのプロセスからのみ継承できますが、多層継承をサポートできます.すなわち、a>b>c>d.....実際の開発過程では、継承を複雑にしないでください.そうすれば、プログラムロジックをもっと理解しにくくなります.継承は実際にどのような役割を果たすのでしょうか.まず,いくつかの属性が継承され,またノード情報が継承される.簡単に言えば、両方あります.現在のプロセスは計算され、現在は計算されていません.親プロセスは計算されています.継承はどんなシーンに適用されますか??継承が業務処理に適用されるパターンは非常に似ており,中間処理環境が異なる場合のみである.例えば、A B C D---O----D-C-B-Aタイプの業務処理フローは、Oのみが異なり、他の処理モードはまったく同じである.この場合、継承方式を採用するのは非常に快適で、親フローを定義すれば、サブフローではO 1つのフローノードだけを定義すればよい.後でプロセス調整を統一して、親プロセスで調整すればいいです.たとえば、flow aaは次のように定義されます.
プロセスの再入力性:
一般的なプロセス編成エンジンでは、プロセスは再入力できません.つまり、1つのプロセスは必ず開始ノードから実行され、必ず終了ノードまで実行されます.Tinyプロセスエンジンでは、現在のプロセスでの切り替えや転送だけでなく、他のプロセスのノードにもストリーミングすることができます.これは、業務処理やページ処理、プロセス処理において極めて大きなメリットを提供していますが、これも両刃の剣であり、このような柔軟な機能を提供するとともに、業務プロセスが複雑に見えるため、制御の面ではアーキテクチャエンジニアやコア開発者が作成するのが望ましく、一般開発者は具体的なビジネスポイントだけを開発すればよい.まとめ:
Tinyフレームワークはプロセス編成エンジンを提供し、機能が強く、拡張が柔軟で、一部のオブジェクト向けの特性をサポートしています.例えば、継承、例えば再ロード、さらにプロセスの再入力性を加えて、それをより柔軟で、便利にします.もちろん、プロセス編成プログラミングにはもう一つの非常に強力な機能があります.オンラインプログラミングが可能で、Xml式のプロセス構成が完了し、すぐに結果を実行することができます.
Tinyフレームワーク構築者は,フロープログラミングと一般的なプログラミング開発には,それぞれ応用シーンと優位性があると考えている.
プログラミング開発は、プログラマーがより大きな自由度を持っているのは、もちろん、その大きな自由度によってプロジェクトの進捗、品質面に大きな不確実性をもたらし、将来のメンテナンス面にも大きな穴を掘る可能性があります.
プロセスプログラミングは、開発者にとって大きな制限があります.つまり、すでに開発されたコンポーネントで開発したり、自分のコンポーネントを拡張したりして開発するしかありません.開発過程はもちろん制限されており、プロジェクトの初期には一定の開発効率の低下をもたらす可能性があるが、最後のメンテナンスコストの面では比較的大きな節約があり、もちろん、その最大の非難はいくつかの機能を実現する際に不便である.また,プログラマーは,プロセス編成型開発を長時間使用すると開発能力が低下し,ボイコットされると考えている.
編成式プログラミングが後期メンテナンスに便利であるため,プロセス編成式開発方式には実際の生存空間がある.もちろん、Tinyフレームワークが提供するプロセス編成式フレームワークは、一般的なプロセス編成開発方式とは異なる特性を提供する.
オブジェクト向けプロパティのプロセス編成開始モデルを十分にサポート
まず、簡単な例から見てみましょう.
<flow id="1000" name="Hello">
<nodes>
<node id="begin">
<component name="helloWorldComponent">
<properties>
<property name="name" value="World" />
<property name="resultKey" value=""helloInfo"" />
</properties>
</component>
</node>
</nodes>
</flow>
コンポーネントhelloWorldComponentのソースコードは次のとおりです.
public class HelloWorldComponent implements ComponentInterface {
String name;
String resultKey;
public String getResultKey() {
return resultKey;
}
public void setResultKey(String resultKey) {
this.resultKey = resultKey;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void execute(Context context) {
context.put(resultKey, String.format("Hello, %s", name));
}
}
上のコードから分かるように、実はその論理は非常に簡単です.2つのカスタムプロパティが用意されています.1つはname、1つはresultKeyです.最後にexecuteメソッドでは、その実装ロジックから、「Hello」に入力した名前を付けて、環境変数のresultKeyに置いて戻ります.
プロセスコンポーネントのインタフェースも、以下のように簡単です.
public interface ComponentInterface {
/**
*
* @param context
*/
void execute(Context context);
}
であるため、その実現も非常に簡単である.次に、このプロセスを呼び出す方法を示します.a.デフォルトの開始ノードで実行を開始します.
Context context = new ContextImpl();
flowExecutor.execute("1000", context);
assertEquals("Hello, luoguo", context.get("helloInfo"));
b.指定ノードから実行Context context = new ContextImpl();
flowExecutor.execute("1000","begin", context);
assertEquals("Hello, luoguo", context.get("helloInfo"));
は確かに実行され、結果が返されたことを見ることができますが、その実行メカニズムはどうなっていますか?より包括的なプロセス構成を参照してください.
<flow id="1000" version="1.0" privateContext="false" extend-flow-id="" name="Hello" title=" " default-node-id="end" begin-node-id="begin" end-node-id="end" enable="true">
<description>some thing....</description>
<nodes>
<node id="begin">
<component name="helloWorldComponent">
<properties>
<property name="name" value=""luoguo""/>
<property name="resultKey" value=""helloInfo""/>
</properties>
</component>
<next-nodes>
<next-node component-result="OK" exception-type="java.lang.Exception" next-node-id="end"/>
</next-nodes>
</node>
</nodes>
</flow>
flowノードのプロパティの意味は次のとおりです.id,一意に1つのプロセスを決定する
privateContext、trueの場合、プロセスでcontextを個別に申請します.そうしないと、呼び出し元のcontextを共有し、環境変数の競合問題を効果的に回避できます.
extend-flow-id、継承の流れid、この継承idは非常に強力な機能で、後で詳しく説明します
バージョン番号は、同じidのプロセスに複数のバージョンが存在し、アクセス時にバージョンを指定しない場合はデフォルトで最新バージョンが使用されます.
name,titleは英語,中国語名を説明するのに用いられ,理解しやすいだけである.
default-node-idは、デフォルトの実行ノード、すなわちコンポーネントの実行が完了した場合、そのアイテム値が次の処理ノードを指定していない場合にデフォルトのノードを実行することを示します.
begin-node-id、開始ノード
end-node-id、終了ノード
指定しない場合、begin-node-idのデフォルトはbegin、end-node-idのデフォルトはend
nodeノード:idは指定され、1つのプロセスでidが一意である必要があります.
コンポーネントノード
class-nameは、組織実装クラス名を指定するために使用されます.
propertiesはコンポーネントのプロパティリストです
propertyのnameとvalueはコンポーネントの属性の値で、value、ここでは文字列が伝わっていますが、実際には処理が非常に柔軟で、後で紹介します.
next-nodesとは、実行結果に基づいて後続処理を行うルールである.
next-node、具体的なルール、component-result、一致項目、正規表現をサポートし、ノード内のコンポーネントの実行結果を一致させ、一致に成功すればこのルールの次のノードを実行します.
Exception-typeは例外のクラス名です.例外が発生し、ここで定義したタイプと一致する場合は、このルールの次のノードを実行します.
継承について
前回継承といえば、extend-flow-idプロパティで指定すれば、プロセス継承は非常に簡単です.継承はマルチ継承をサポートしません.すなわち、プロセスは1つのプロセスからのみ継承できますが、多層継承をサポートできます.すなわち、a>b>c>d.....実際の開発過程では、継承を複雑にしないでください.そうすれば、プログラムロジックをもっと理解しにくくなります.継承は実際にどのような役割を果たすのでしょうか.まず,いくつかの属性が継承され,またノード情報が継承される.簡単に言えば、両方あります.現在のプロセスは計算され、現在は計算されていません.親プロセスは計算されています.継承はどんなシーンに適用されますか??継承が業務処理に適用されるパターンは非常に似ており,中間処理環境が異なる場合のみである.例えば、A B C D---O----D-C-B-Aタイプの業務処理フローは、Oのみが異なり、他の処理モードはまったく同じである.この場合、継承方式を採用するのは非常に快適で、親フローを定義すれば、サブフローではO 1つのフローノードだけを定義すればよい.後でプロセス調整を統一して、親プロセスで調整すればいいです.たとえば、flow aaは次のように定義されます.
<flow id="aa" name="aa">
<nodes>
<node id="begin">
<next-nodes>
<next-node component-result="begin" next-node-id="hello"/>
</next-nodes>
</node>
<node id="hello">
<component name="helloWorldComponent">
<properties>
<property name="name" value=""luoguo""/>
<property name="resultKey" value=""helloInfo""/>
</properties>
</component>
<next-nodes>
<next-node component-result="OK" next-node-id="end"/>
</next-nodes>
</node>
</nodes>
</flow>
flow bbは、次のように定義されています.<flow id="bb" name="bb" extend-flow-id="aa">
<nodes>
<node id="hello">
<component name="helloWorldComponent">
<properties>
<property name="name" value="LG" />
<property name="resultKey" value=""helloInfo"" />
</properties>
</component>
</node>
</nodes>
</flow>
プロセスbbも順調に実行でき、実行結果はHello,LGプロセスの再入力性:
一般的なプロセス編成エンジンでは、プロセスは再入力できません.つまり、1つのプロセスは必ず開始ノードから実行され、必ず終了ノードまで実行されます.Tinyプロセスエンジンでは、現在のプロセスでの切り替えや転送だけでなく、他のプロセスのノードにもストリーミングすることができます.これは、業務処理やページ処理、プロセス処理において極めて大きなメリットを提供していますが、これも両刃の剣であり、このような柔軟な機能を提供するとともに、業務プロセスが複雑に見えるため、制御の面ではアーキテクチャエンジニアやコア開発者が作成するのが望ましく、一般開発者は具体的なビジネスポイントだけを開発すればよい.まとめ:
Tinyフレームワークはプロセス編成エンジンを提供し、機能が強く、拡張が柔軟で、一部のオブジェクト向けの特性をサポートしています.例えば、継承、例えば再ロード、さらにプロセスの再入力性を加えて、それをより柔軟で、便利にします.もちろん、プロセス編成プログラミングにはもう一つの非常に強力な機能があります.オンラインプログラミングが可能で、Xml式のプロセス構成が完了し、すぐに結果を実行することができます.