[疑问] 项目启动时, 关于数据的保存问题
我们启动 application , 在浏览器上输入 URL, 向本地服务器请求 HTML 资源
这时, 如果系统没有错误, 而且地址是正确的, 那么浏览器就会将从服务端获取的 HTML 代码和相应的样式文件等, 渲染成一个网页.
然后, 我们输入查询参数, 通过HTTP的POST请求, 将参数发送到 controller 层,
Controller 控制层: 这是面向前端请求的数据接口, 以前的 controller 也叫 Handler , 跟C++里的句柄同名, 而考虑到句柄是操作对象的关键, 这里也可以将 controller 看作是操作 WEB 项目里数据的关键, 虽然看似是用户在操作数据请求, 但是用户的所有请求都是在 controller的控制范围里面的, 所以 controller 是一个抽象的操作概念 , 它规范了一个项目里请求的范围, service 层的操作也是基于 controller 的要求, controller 要求查询多条数据, service 就不能只查询一条数据, controlled 要求输出一个 String 类型的数据, service 就必须把仅有的 int 类型的数据变成 String 类型的数据返回给 controller; 而对用户而言, 如果 controller 里面只定义了 添加和删除两种操作, 那用户就不能进行 查询和修改操作, 如果 controller 里规定了执行添加操作必须要提供相应的参数, 那用户如果没有提供这样的参数 controller 就不会去执行添加操作,,,,,,没错, controller 就是这么傲娇 (~ ̄▽ ̄)~ emmmmm,,,其实是傻吧(`・ω・´)
现在呢, controller 已经接受到了用户发来的正确请求和相应的参数, 那么 controller 就会去调用相应的 service 层接口, 把锅全部扔给它,,,,谁叫 service 的中文名就是"服务"呢..嘤嘤嘤
Service 逻辑操作层: 整个 WEB 项目中最苦逼的部分没错了. service 层一般是根据 controller 来定的, 而且一个 service 接口的实现类中有时不止只有一个方法, 还会根据项目中的配合有其他的方法, 例如: 我们要做一个用户查询, 要求拿到用户的个人信息(姓名, 年龄,工作), 根据抽象原则, 我们可以为用户的姓名和年龄单独建一个 service 接口, 再单独的为工作建一个 service 接口, 而我们在进行用户信息查询的时候, 可以分别调用那两个 service 接口就行了, 方便省事.
其实到这里我要谈谈我们开发时的思路问题了, 都说编程要从下到上,,,,不知道是我的理解问题还是怎么的, 我怎么觉得这种想法好像没那么正确,,最简单的, 你说要自下而上的开发, OK, 没有需求你开发个锤子, 当你满心欢喜的写完数据查询的时候最后发现跟需求上要求的相差甚远, 甚至会给自己挖下很多的坑, 我觉得吧, 应该把这个过程说明白, 在一开始面对需求的时候, 我们的设计是自上而下的, 下面的所有设计都根据最上层的需求来设计, 当应该需求的整体设计大致完成后, 如果做得更好, 连伪码也写得差不多了, 那么到后面写代码的时候也就是手速问题了, 到写代码的时候在自下而上的开发, 这样才是正确的姿势,,可是几乎所有的人都在叫我自下而上的开发,,,,,,这种说话说半截的真的很误人子弟好伐,,这是要负法律责任的(滑稽)
Mapper 层的数据映射接口和SQL语句其实都不是很重要了, 反正都是完全按照 controller 的要求进行的查询;
OK 思路梳理到这里, 我们在反过来看标题, 虽然这个问天网也不知道怎么把它简化描述啦, 但是大概我的猜想是这样的: 有一百个用户, 他们的个人信息中的 姓名和年龄 我把它们归类在 A部分, 工作 归类在 B部分, 并且单独为 A部分和B部分创建相应的数据映射别名对象(其实就是POJO类啦), 然后单独进行查询, 成功查询后的数据都存放在对应的数据对象中 (其实在这里也还是有一个问题, 那就是从数据库中查询出来的数据到底是放在哪里的? 我姑且就认为这些数据就是放置在由它们的映射对象开辟的内存空间里的吧), 经过前面的查询, 现在 A部分和B部分里面都是可以有数据被查询到网页上的了, 那么就可以认为这里面是有数据的.
然后先暂时按下用户查询, 现在我们去查询公司的信息, 可以查到 公司名称, 部门, 岗位 ,然后这里的岗位是和用户信息关联在一起的, 在不考虑其他因素的前提下, 我们可以通过调用 B部分里实体类的工作属性里面的数据来作为查询公司信息的条件么?
或许这样说有些抽象, 来 看代码
上面是三个对象的定义
然后根据前面的查询, A,B 部分里面都是有数据的(好像这样设计也是有问题的, 但是重点不在这里,,先这样吧,,嘤嘤嘤)
然后是对应的 mapper 和 service ,虽然这时好像是可以成功查询到的, 那么这也只是两个部分的数据, 但是我们在一个完整的项目中 ,肯定不会这么简单, 当我们从好几张表里面查询出数据之后, 这些数据会放在哪? 会放置多久?而当我执行完 用户的数据操作后, 这个查询需求的生命周期是多久? 当我进行公司查询的时候为什么还可以使用? 还是说我想错了? 当用户查询到数据并且返回给HTML后, 用户查询的生命周期就结束了, 然后在进行公司查询的时候, 那个 B 部分里面的数据是再一次进行查询出来的数据, 而不是前面遗留下来的数据?
是这样的么? 正是因为这样我们为了项目的性能才使用缓存的么?
OK,,又有一个坑了