[英]Class variable vs passing parameter in java - design issue
假設我在SOA模型應用程序中有2個類。
問題是,如果SvcBusiness類使用請求作為其類變量,或者它應該只在其中一個業務方法中使用請求? 可能需要將請求傳遞給DAO層等其他較低層。 這些類是否也將請求用作類變量,或者請求是否只是方法的一部分?
ServiceImpl類:
public class ServiceImpl {
public Response getDataForType1Request(Request type1) {
SvcBusiness buzclazz = new SvcBusiness();
return buzclazz.doOperationForType1(type1);
}
public Response getDataForType2Request(Request type2) {
SvcBusiness buzclazz = new SvcBusiness();
return buzclazz.doOperationForType2(type2);
}
}
選項1:當請求作為參數傳遞時。
public class SvcBusiness {
public Response doOperationForType1(Request type1) {
// do business and return response1
}
public Response doOperationForType2(Request type2) {
// do business and return response2
}
}
選項2:將請求設置為類變量。 在這種情況下... ServiceImpl將在創建對象時將請求傳遞給SvcBusiness構造函數..並且只需調用execute()方法。
public class SvcBusiness {
private Request request;
public SvcBusiness(Request request) {
this.request = request;
}
private Response doOperationForType1() {
// do business and return response1
}
private Response doOperationForType2() {
// do business and return response2
}
public Response execute() {
// if type1 request call doOperationForType1()
// if type2 request call doOperationForType1()
}
}
請幫忙! 兩者的優點和缺點是什么? 是否有設計模式來解決這種情況?
不要在類層次結構中進一步使用請求(和響應)! 服務(以及服務調用的所有內容)可以從其他地方調用,其中不存在請求。 然后你會遇到填充該參數的問題。 在服務中使用自己的數據模型,並從請求中提取和轉換所需的所有內容。
完全同意Uwe的回答。 但是,如果您仍然想要使用Request類,那么它作為參數(Servlets的工作方式)的危害就會小一些。 否則,您必須在極有可能的多線程環境中處理同步。
當我遇到這樣的問題時,我總是想知道我是否真的需要一個物體。 通常我使用選項1但是將所有方法創建為static
。 由於這些方法不依賴於當前對象狀態(沒有實例屬性),因此我保存了一些內存而不是創建這樣的對象(其他選項只是實現Singleton模式)。
public class SvcBusiness {
public static Response doOperationForType1(Request type1) {
// do business and return response1
}
public Response doOperationForType2(Request type2) {
// do business and return response2
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.