学子主站与场地申请的代码设计问题

在写场地申请代码的时候,会经常遇到一些怎么组织代码的问题,由于在设计这方面比较无脑,里面一些问题感觉没有很好地解决,恨当时都没有及时记录下来....
所以趁着现在在对代码还有一点记忆,我打算把他们记录下来,希望各位师兄能指点下。
场地申请代码在http://git.oschina.net/doyoubi/field-application/tree/develop/field_application/field_application
换届之后会放到一个公共仓库里面。

场地申请按场地分成四个板块,学活,展览场地,露天场地,会议室。
我们现在写的代码里面,我觉得最大的问题是,这四个场地的控制器逻辑基本是一模一样的,具体可参考学活跟会议室的控制器代码  学活  会议室
四个场地的功能都包括,列出所有申请,提交申请,修改申请。如果某个地方需要修改,一般要四份代码一起修改。= =我在这里吃了很多苦头,修改dulplicate的非常繁琐,而且非常容易出错。(可以看下两个场地的 ListAppView)
ListAppView来说,两个场地的代码,不同的地方就 model, form, 还有一些返回信息。其它基本是一样的。我曾经想过按c++的模板的想法,将这些东西都弄成参数。具体做法是将这些写控制器代码的class放在一个函数里面,然后让这个函数接受这些model,form作为参数,然后让这个函数返回这些class。
  1. def GenericViewClassFactory(model, form, msg):
  2.      class ListAppView(View):
  3.              def get(request):
  4.                   # use model, form, msg

  5.              def post(request):
  6.                   # use model, form, msg

  7.      return ListAppView

验证逻辑(业务逻辑)不放在form里面,而应放在其他地方,因为这样会把验证逻辑 跟 如何处理 “已经太多人申请”的逻辑混在一起。
for time in self.cleaned_data['time']:
            if len(MeetingRoomApplication.objects.filter(
                    place=self.cleaned_data.get('place'),
                    date=self.cleaned_data.get('date'),
                    time__contains=time)) > 2:
                msg = time + u'已有过多人申请'
                self._errors['time'] = self.error_class([msg])
                del self.cleaned_data['time']
                break



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值