1

我必须调用三个 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

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

4

2 回答 2

2

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

于 2013-09-24T20:53:38.953 回答
0

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

于 2013-09-24T20:25:16.317 回答