设计问题:哪个更好的做法? [英] Design Question: Which is Better practice?

查看:105
本文介绍了设计问题:哪个更好的做法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有3个不同的Web服务器来处理用户数据(username / passwd / email / etc)。我分别有3个不同的Web服务调用,所以我创建了3个不同的类,它们调用相同的信息( getUsername setUsername getEmail setEmail 等)。从主类我实例化每个webservice调用对象,当我有一个新的用户名请求时,密码我调用每个类的 createUsername()方法(配置数据)



您是否有任何关于如何应用此问题的设计模式的建议?我想到做一个类,它将有一个方法 createUsername(){} ,在这我将调用每个webservice类,并将每个结果存储在一个预定义的数组。有没有人有任何建议或更好的做法?



目前我有:

  
类webservice1calls {
函数createUser($ username,$ password){}
函数deleteUser($ username,$ password){}
函数createGroup($ groupname){}
function deleteGroup ($ groupname){}
}



class webService2calls {
function createUser($ username,$ password){} //不同的实现
函数deleteUser($ username,$ password){} //不同的实现
函数createGroup($ groupname){} //不同的实现
函数deleteGroup($ groupname){} //不同的实现
}



class webService3calls {
function createUser($ username,$ password){} //不同的实现
function deleteUser($ username ,$ password){} //不同的实现
函数createGroup($ groupname){} //不同的实现
函数deleteGroup($ groupname){} //不同的实现n
}



//我的像代理类:



class webServiceCalls {
function createUser($ username,$ password){
$ ws1 = new webService1calls();
$ ws2 = new webService2calls();
$ ws3 = new webService3calls();

  $ res1 = $ ws1-> createUser($ username,$密码); 
$ res2 = $ ws2-> createUser($ username,$ password);
$ res3 = $ ws3-> createUser($ username,$ password);

//返回结果取决于$ res1,$ res2和$ res3值

}



//并且这个调用是从另一个类来完成的,就像这样:



class doThings {
函数run(){
$ ws = new webServiceCalls();
$ ws_res = $ ws-> createUser();
}
}


我以为上述表示可以帮助您了解当前的
设计(可以更好地了解这个问题
谢谢!

解决方案

Eep!他们应该共享一个公共基类或使用一个接口:

  interface WebService {
function createUser($ username,$密码);
函数deleteUser($ username,$ password);
函数createGroup($ groupname);
函数deleteGroup($ groupname);
}

class MyService实现WebService {
函数createUser($ username,$ password){}
函数deleteUser($ username,$ password){}
函数createGroup($ groupname){}
函数deleteGroup($ groupname){}
}

其次,我希望你服务实际上并没有被称为1,2,3,如果是的话,那对我来说,也许你会这样我会使用某种形式的数组。



我不喜欢你的代理类的想法。您是否总是使用所有3种服务,或者这是某种图书馆,您只需要包含所需的服务?您没有提供足够的信息,说明您实际想要完成的任务。


I have 3 different web servers which handle user data (username/passwd/email/etc.). I have 3 different web service calls respectively, so I've created 3 different classes which calls for the same information (getUsername, setUsername, getEmail, setEmail, etc.). From the main class I instantiate each webservice-call objects and when I have a request for a new username, password I call the createUsername() method of each class (provisioning the data).

Do you have any suggestions on how to apply a design pattern for this problem? I thought of making a class which will have a method createUsername() {} and in this I would call each of the webservice-classes and store each result in a predefined array. Does anyone have any suggestion or a better practice?

currently i have:


class webservice1calls {
function createUser($username, $password) {}
function deleteUser($username, $password) {}
function createGroup($groupname) {}
function deleteGroup($groupname) {}
}

class webService2calls { function createUser($username, $password) {} //different implementation function deleteUser($username, $password) {} //different implementation function createGroup($groupname) {} //different implementation function deleteGroup($groupname) {} //different implementation }

class webService3calls { function createUser($username, $password) {} //different implementation function deleteUser($username, $password) {} //different implementation function createGroup($groupname) {} //different implementation function deleteGroup($groupname) {} //different implementation }

//My "like a proxy" class:

class webServiceCalls { function createUser($username, $password) { $ws1 = new webService1calls(); $ws2 = new webService2calls(); $ws3 = new webService3calls();

$res1 = $ws1->createUser($username, $password);
$res2 = $ws2->createUser($username, $password);
$res3 = $ws3->createUser($username, $password);

// return result depending $res1,$res2 and $res3 values

}

//and the call is done from another class somewhat like this:

class doThings { function run() { $ws = new webServiceCalls(); $ws_res = $ws->createUser(); } }

I thought that the above representation would help you understand the current design (and maybe a better understanding of the problem. thanks!

解决方案

Eep! Firstly, since these are so similar, they should share a common base class or use an interface:

interface WebService {
    function createUser($username, $password);
    function deleteUser($username, $password);
    function createGroup($groupname);
    function deleteGroup($groupname);
}

class MyService implements WebService {
    function createUser($username, $password) {}
    function deleteUser($username, $password) {}
    function createGroup($groupname) {}
    function deleteGroup($groupname) {}
}

Secondly, I hope your services aren't actually called 1,2,3. If they are, that suggests to me that maybe you should be using some form of an array.

I don't like your idea of a "proxy" class. Are you always using all 3 services, or is this some sort of library where you just include the service you need? You haven't provided enough info about what you're actually trying to accomplish.

这篇关于设计问题:哪个更好的做法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆