欢迎使用CSDN-markdown编辑器

1.MVC架构 编程遵循的原则

1.M-Model:模型 负责业务逻辑,封装软件的核心功能如:登录功能,开始考试,交卷等

2.V-View:视图 负责显示界面和用户的交互,呈现用户的数据状态,接受用户请求,界面中只包含显示逻辑

3.C-Controller:控制器 是模型层M和视图层之间的桥梁,用于控制流程,耦合界面与业务模型,响应用户请求将请求转化给业务模型(处理)。根据处理结果更新数据发给视图界面。控制器中包含界面的控制逻辑(如:界面的显示和关闭)

2.MVC构架中的业务模型-M还可以细分:

1.业务层
2.数据管理层 提供对数据的CRUD操作,只关心数据操作不涉及业务功能

3.MVC请求流程:

用户访问View,发出请求,请求由控制器处理,控制器请求业务模型完成处理,然后根据处理结果跟新界面

4.任务:登录流程的实现
   1).增加业务模型层:
         com.tarena.elts.sever.ExamSever
         里面包好登录的抽象功能(包括登录成功或失败)
   2).增加业务和界面之间的控制器:
         com.tarena.elts.ui.ClientContext
   3).添加LoginFrame登录按钮的响应事件代码

   4).在LoginFrame里面添加控制器属性和set方法

   5).将loginFrame里面输入框和密码框设为全局属性,并添
   加获得内容的方法

   6).在ClientContext里面添加LoginFrame属性,MenuFrame属
   性以及他们的set方法

   7).回到ClientContext中完成Login()方法
       1.获取界面中的ID和PWD,
       2.调用ExamService中的login(得到结果)
           if
               成功:更新菜单界面,关闭登录界面,显示菜单界面。
           else
               失败:捕获失败异常,更新登录界面,显示失败信息
  8).去LoginFrame添加noticeLabel的全局属性,增加显示noticeLabel错误
  信息的方法
  9).写测试类,
      [1].创建了一些对象,
      [2].注入对象
      [3].测试
 10).通过测试得知,判断登录的逻辑需在ExamService的实现类,
 11).创建com.tarena.elts.service.ExamServiceImpl
     [1].继承自ExamService接口(自动重写login方法).
     [2].添加EntiyContext属性和set方法.
     [3].完成login方法,
         根据ID找用户:
             if cant's find,throw Exception,
             if find ID,match password,
             if match password right ,create paper,return user
             if match password wrong,throw Exception
 12).修改测试类,创建ExamService对象,给ExamService这个接口增加一个set方法,然后注入对象,

封装页面显示逻辑

实现软件退出功能

[1].在ClientContext中添加界面退出方法
[2].位LoginFrame的cancelBtn添加事件监听,在事件中调用Exit方法    
[3].屏蔽了LoginFrame的窗口关闭按钮
[4].为LoginFrame添加windowListener,重写windowClosing方法,

测试

2015/7/9

任务,实现开始考试功能

一.在MenuFrame里面,添加ClientContext属性,及set方法,给“开始考试”按钮添加事件(事件中调用控制器的start()方法)
二.重构ClientContext类,添加start方法
    1.调用ExamService的start(),同时返回一个考试信息,
    2.关闭菜单界面
    3.更新考试界面
    4.显示考试界面
三.重构ExamService类,添加start()
    1.创建考卷试题,考卷信息
    2.返回考卷信息(供考试界面调用),
四.重构ExamService类(供考试界面调用),
    1.添加ExamInfo start()
    2.添加getQuestionInfo(int index),获取一道考题
五.ExamServiceImpl
    1.重写ExamInfo start()
    2.重写getQuestionInfo(int index)
    3.添加一个私有的创建考卷的方法createPaper(int numbers)
    4.创建一个包含所有考题的集合,List<Question> paper
    5.添加一个私有的设置每个考题的分数的方法 setScore()
六.ExamFrame中添加一个更新界面的方法;
    updateView(ExamInfo e,QuestionInfo q)

重构:refactoring 通过调整代码改善软件的质量和性能,使其程序的设计模式和架构趋于合理,提高软件的扩展和维护

实体对象和值对象

实体对象:User Question
值对象:ExamInfo QusetionInfo

实体对象有唯一标识,可以进行比较和区分,可以持久化
值对象,一个具体的值,不需要比较,不需要持久化

2015/7/10

过程中遇到的问题,
Q1:
 List<Integer> getOptionStatus(){//to gain user's optionsList
        ArrayList<Integer> answersList = new ArrayList<>();
        //当answerList为全局的时候,每一次传值传的时候,虽然clear了,但是类似c的指针,清空当前指针的时候是把引用清空了,但是它本身并没有清空,所以每次传值的时候都传的一样的,集合中存的是元素的引用,而不是元素本身
        if (a.isSelected()){
            answersList.add(a.value);
        }
        if (b.isSelected()){
            answersList.add(b.value);
        }if (c.isSelected()){
            answersList.add(c.value);
        }if (d.isSelected()){
            answersList.add(d.value);
        }
        //System.out.println(answersList);
        return answersList;
    } 

q2: 下方的button会随左边label的长度大小变化而变化
解决方法:把左右两边的label都分别添加进Jpanel,然后设置Jpanel的默认大小就ok。

然后这差不多就是实训的笔记和问题,
代码在这:http://www.oschina.net/code/snippet_2376204_58018

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值