kse*_*een 1 .net c# wcf refactoring design-patterns
我正在审查他的WCF服务中的一些人的代码:
[ServiceContract]
public interface IDBService
{
[OperationContract]
void DBUpdateInsert(string sql, params string[] parameters);
[OperationContract]
object DBSelect(string sql, params string[] parameters);
}
Run Code Online (Sandbox Code Playgroud)
并且每个需要调用SQL代码的函数都使用此服务.
这种方式的优点和缺点是什么?对我来说似乎很不确定.
不寒而栗.这不是一个API - 它是一个漏洞.SOA的一部分重点是隔离不同的部分 - 允许对数据库进行微小更改,以免影响服务调用者.在这里,调用者提供原始SQL.这意味着他们需要对数据库的乱伦了解.所以它违反了封装.但是,还有其他严重问题:
最重要的:
也:
"delete from Orders"
吗?你没有能力消毒打电话能做什么/不能做什么string[]
参数 - 并非所有值都是明确的字符串; 这表明对数据模型没有任何理解 - 只是"东西"object
- 好吧,不管怎么说,这不是数据合同,所以在大多数WCF绑定下都行不通 - 尽管NetDataContractSerializer
如果它感觉很慷慨可能会原谅你但是,同样,这不是一个API.API将使用类型化参数在众所周知的受控服务下公开谨慎的数据.有设立一个体面的API的十几二十的方式-从单独的方法(在"控制"端)到喜欢的东西的OData(在"开放"端) -但没有那些将围绕通过SQL.
如果我不得不猜测:这位开发人员正在编写一个具有直接SQL访问权限的富客户端应用程序,并被告知要通过服务公开数据.他们不是实际编写服务,而是简单地在WCF层公开他们现有的SQL代码.那是倒退.他们现有的SQL代码(谨慎的SQL操作,GetCustomer
等等)应该成为 WCF层.调用客户端应该忘记它知道的任何SQL,并绑定到WCF服务.
归档时间: |
|
查看次数: |
63 次 |
最近记录: |