解藕的小例子

   Wiki上对MVC的定义是:MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。无论是C++的MFC,JAVA的J2EE和swing,Ruby的Ruby on Rails,还是Python的django,都可以说采用了MVC模式的思想。MVC模式中解藕是重要的一环,引用一句话“那么多的设计模式,那么多的软件架构,无非就是封装和解耦、继承和关联、多态和转型的应用。这里面,着重看一下解耦。评价一个软件结构是否合理,耦合的强弱是很重要的一个评判因素,强耦合的系统在应对变化的时候总是感觉乏力,而一个弱耦合的系统则会轻松自如。”

  the django book2.0有一个解藕的小例子如下:

  

 1 # urls.py
 2 from django.conf.urls.defaults import *
 3 from mysite import views
 4 urlpatterns = patterns('',
 5 (r'^(foo)/$', views.foobar_view),
 6 (r'^(bar)/$', views.foobar_view),
 7 )
 8 # views.py
 9 from django.shortcuts import render_to_response
10 from mysite.models import MyModel
11 def foobar_view(request, url):
12 m_list = MyModel.objects.filter(is_new=True)
13 if url == 'foo':
14 template_name = 'template1.html'
15 elif url == 'bar':
16 template_name = 'template2.html'
17 return render_to_response(template_name, {'m_list': m_list})

 

  urls.py对url进行配置,但是url的部分工作却在views.py中完成。如果你打算把 /foo/ 改成 /fooey/的话,那么你就得记住要去改变视图里面的代码。

解藕的方法是对url的处理只在urls.py中完成,只要传递给views.py一个参数就可以了。

  

 1 # urls.py
 2 from django.conf.urls.defaults import *
 3 from mysite import views
 4 urlpatterns = patterns('',
 5 (r'^foo/$', views.foobar_view, {'template_name': 'template1.html'}),
 6 (r'^bar/$', views.foobar_view, {'template_name': 'template2.html'}),
 7 )
 8 # views.py
 9 from django.shortcuts import render_to_response
10 from mysite.models import MyModel
11 def foobar_view(request, template_name):
12 m_list = MyModel.objects.filter(is_new=True)
13 return render_to_response(template_name, {'m_list': m_list})

 

 

posted @ 2013-05-17 14:22  lkprof  阅读(590)  评论(0编辑  收藏  举报