0

嗨,我正在使用 AngularJs 和 c# wcf RESTful 服务构建一个小型 Web 应用程序。还有一个登录模块,它有一个存储过程,代码最少,只验证提供的用户名/密码是否正确,这里是代码

 alter procedure sp_loginTable
(
@username varchar(50),
@password varchar(25),
@output bit out
)
as

declare @queryedUsername varchar(50)
declare @queryedPassword varchar(25)
select @queryedUsername =username,@queryedPassword=password from userLoginTable where username='surya'
if ((@queryedUsername=@username) and (@queryedPassword=@password))
SET @output=1
ELSE
 SET @output=0
GO

并且有一个密码“123456aA”存储在表中..如果我给“123456aa”作为输入,代码总是返回1..我搜索了许多堆栈溢出问题,人们在字符串比较上提出了各种解决方案,但代码很大。。

如果我们编写,字符串比较很容易在 C# 中实现

string nameone = "123456aA";
string nametwo = "123456aa";
Console.WriteLine(nameone.Equals(nametwo));//returns false

有一种相等的方法可以进行正确的字符串比较..

那么最好将登录验证移动到 dataAccessLayer 还是应该在存储过程中执行验证?..我不想仅仅为了这个验证而在存储过程中编写大量代码,因为 c# 有一个处理字符串的内置函数比较顺利。。

给你宝贵的意见..

谢谢

4

1 回答 1

3

关于存储业务逻辑的位置有很多争论:在数据库中还是在业务层或其他层中。

我假设您不是在谈论验证谁可以访问数据库(例如您的进程),我假设您是在谈论验证可以访问您的应用程序的用户(以及间接访问数据库)。

在这种情况下,这是我的看法:

  • 数据库的职责是存储数据并在请求时非常快速地提供数据。使数据可用可以通过 sql 完成,但存储过程可以提供帮助。所以数据库应该担心管理数据。
  • DataAccessLayer 的职责是使您的代码更容易评估数据库。客户端代码只调用一个函数,该函数将创建与数据库的连接、创建命令等。所以 DataAccessLayer 应该只关心(技术)连接。
  • 另一个组件,不在您的问题中,是 BusinessLayer 或 BusinessLogicLayer。他的职责是做所有功能性的事情。像计算、检查业务规则、验证等。业务逻辑放置在您的用户界面和 DataAccessLayer 之间。

由于用户名/密码验证是您的应用程序功能的一部分,因此它属于您的 BusinessLogic。

于 2013-04-28T08:23:54.457 回答