动态创建类

时间:2013-09-24 20:05:44

标签: vb.net web-services

我需要调用三个Web服务来完成一些工作。它们都接受一个对象(不同的对象)作为输入参数,一个对象(不同的对象)作为输出参数。请参阅下面的数据库表:

CREATE TABLE WebServices (id int identity not null, webaddress varchar(50), classname varchar(30), inputParameter varchar(30), outputparameter varchar(30), function varchar(30))

INSERT INTO WebServices (classname, webaddress, inputparameter, outputparameter,function) values ('WebService1', 'http://localhost/webservice1.asmx', "object1", "object2", "function1")
INSERT INTO WebServices (classname, webaddress, inputparameter, outputparameter,function) values ('WebService2', 'http://localhost/webservice2.asmx', "object3", "object4", "function2")
INSERT INTO WebServices (classname, webaddress, inputparameter, outputparameter,function) values ('WebService3', 'http://localhost/webservice3.asmx', "object4", "object5", "function3")

在代码中,我将根据数据库中的值构造类。这是可取的/可行的吗?我相信我可以用反思做到这一点。

或者,我会以通常的方式创建三个新类,并使用工厂返回相应的类,如下所示:

If id=1 then
return new WebService1
ElseIf id=2 then
return new webservice2
ElseIf id=3 then
return new webservice3
End If

我在徘徊,哪个选项更好。

2 个答案:

答案 0 :(得分:2)

虽然可以使用CodeDom类动态生成类,但对于这种情况来说,它是丑陋且不明智的。如果可以,我建议更改WebService的行为,以便它返回键/值对或包含结构化数据的XML文档作为字符串。如果你真的必须返回一个具有特定属性的对象,我建议总是返回一个同一个类的对象,但只是让该类完全覆盖SOAP序列化以输出自己,但是你需要它。如果所有其他方法都失败了,我会在通过CodeDom路由下去动态类之前使用你的第二个选项。

答案 1 :(得分:0)

使用反射总是比硬编码慢(反射需要时间),所以如果速度更好,那么选项2就是答案。如果编写更通用的代码并且可能更快地编写它更好,那么选项1会更好。