2 wgs1393044648 wgs1393044648 于 2017.09.16 11:21 提问

业务逻辑层和界面层该怎么写?有点弄不清楚,分不明白, 不好意思,刚才发错了 5C

哪些代码应该写在业务逻辑?又哪些代码应该写在界面层?

不要概念,稍微具体一点,能拿个实例说一下最好,谢谢

4个回答

caozhy
caozhy   Ds   Rxr 2017.09.16 11:35

数据表增删改查放在数据访问。
业务逻辑放在业务层。比如说,一个会员卡,充100送100.,消费的时候,先使用充值的本金,然后使用送的钱。如果用户消费了50元,此时用户余额是150,但是如果用户退卡,那么退款只能退50。
这样的逻辑就是业务逻辑。
至于表里面怎么查询和存储这个余额,怎么更新,就是数据访问。

caozhy
caozhy 回复无歆可行: 输入验证、页面这些在界面,业务逻辑已经解释过了,不重复了。
2 个月之前 回复
wgs1393044648
wgs1393044648 不好意思,刚才发错了,是业务逻辑和界面层
2 个月之前 回复
qq_31179577
qq_31179577   2017.09.16 20:43

如果你喜欢编程,那就看我的博文,三层架构在功能上以及意义上,都不是楼上讲的那样肤浅。而且三层架构在绝大多数人的使用中,都从形式上摒弃了模型的作用,如果是刚做开发,一定要走正确道路

Small_Mouse0
Small_Mouse0   Ds   Rxr 2017.09.16 12:00

数据访问层,,,很好理解吧,,dao层,也可以叫持久层
(数据库内容跟存到文件里一样,不像代码中变量程序关了变量内容就没了,所以叫持久层)
数据库访问层主要就是和数据库打交道,说白了就是【增删改查数据库】

业务逻辑层,,service层,不是必须,,有些逻辑复杂的会加上service层
几个例子,,最近做的同学做的“在线大数计算器”
【1】通过视图层访问到控制层,
【2】由于是不是一两句代码能够完成的计算,所以需要加一个业务逻辑层,计算出结果返回到控制层。(如果计算int+int,直接控制层就返回了)

界面层,,view层,,
这有段历史“曾经jsp刚出来的时候,页面里可以写脚本,很方便,,,但是人们发现,页面变的越来越复杂,,不容易维护,,所以分成两层”
view层和业务逻辑层,这两层数据传输就是Model,,【MVC】
view主要负责显示,

分层只是抽象形式,,具体也会是根据需求而定,,不是必须

Small_Mouse0
Small_Mouse0 所以分成两层” view层和控制层,,,打错了
2 个月之前 回复
weixin_39521929
weixin_39521929   2017.09.16 12:57

业务逻辑是向用户提供操作接口,数据层是负责提供数据的,负责向数据库读写数据

比如登录

DLL逻辑层 提供了登录的方法,做的是登录后出现情况的处理,可由UI层来调用DLL的登录
public class UserDll:
public void Login(string name,string pwd)
{
User user = DAL.UserDal.GetUserData(name); //登录需要数据验证吧交给数据层ok
if(user!=null)
switch(user.Login(pwd))
{
case 0: 密码错误怎么办
case 1: 正确怎么办
default:break;
}
else
用户不存在
}

DAL数据层 提供获取数据的方法,只是单纯的向外提供数据,负责跟数据库打交道
class UserDal:
Public User GetUserData(string name)
{
SqlConnection con = SqlConnectionPool.GetOneConnection(); //从连接池拿到一个数据库连接
var url='' select * from user where name=''+name+''; //var 会具体到数据的实际类型,表示任一类型
var data = con.Execute(url).getData(0); //执行查询获得数据,具体要进行异常捕获和看你怎么弄的了,这里简单表示了
if(data!=null)
return new User(data); //数据模型User类提供使用data构造方法
else
return null; //如果date得到了查询结果的引用不为null就不会为null
}

关于User的实现
public class User
{
var name;
var pwd;
public User(var data) //看情况是否需要重载来保留原构造
{
name=data.name;
pwd=data.pwd;
}

    public int Login(string pwd)
    {
                if(!pwd.Equals(pwd))
                return 0;
                else
                return 1;
    }

}

只是简单示列不作为可执行代码,具体还看你的实际情况,提供的只是一个思路

weixin_39521929
weixin_39521929 回复无歆可行: 表示能否再表述清楚一点,不是很明白你描述的情况。一个操作具体要写哪,要看它的意义所在,以及什么时候什么情况下才需要去执行它
2 个月之前 回复
wgs1393044648
wgs1393044648 public void state(){ Video video=vs.findone(videoId); video.setVideoPlayTimes(video.getVideoPlayTimes()==null?1:video.getVideoPlayTimes()+1); vs.updatevideo(video); } 就如Controller的这个方法,第三句是写到service的?
2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片