【发布时间】:2014-04-16 11:18:22
【问题描述】:
我正在使用 Django 进行开发,我们对是否应该在项目中使用或不使用常量有一些疑问。确切的情况是在任何地方都使用常量(我们知道 Django 中的常量并不是真正的只读)。
有两种情况,我想听听您的意见,哪个更适合您以及为什么:
场景 1(使用常量)
常量.py
>class CONST():
def NAME(): return "name"
def SURNAME(): return "surname"
def ZIPCODE(): return "zipcode"
def CITY(): return "city"
def CREATED(): return "created"
admin.py
>from constants import CONST
class RegisterAdmin(admin.ModelAdmin):
list_display = (CONST.NAME(),CONST.SURNAME(),CONS.ZIPCODE())
list_filter = [CONST.ZIPCODE(),CONST.CITY()]
search_fields = [CONST.NAME(), CONST.SURNAME()]
date_hierarchy = CONST.CREATED()
models.py
>from constants import CONST
class Register(models.Model):
name = models.CharField(CONST.NAME(), max_length=25)
surname = models.CharField(CONST.SURNAME(), max_length=25)
zipcode = models.IntegerField(CONST.ZIPCODE())
city = models.CharField(CONST.CITY(),max_length=20)
...以及您使用文本的任何视图等都将使用内容...
场景 2(无常量)
admin.py
>class RegisterAdmin(admin.ModelAdmin):
list_display = ("name","surname","zipcode")
list_filter = ["zipcode","city"]
search_fields = ["name","surname"]
models.py
>class Register(models.Model):
name = models.CharField("name", max_length=25)
surname = models.CharField("surname", max_length=25)
zipcode = models.IntegerField("zipcode")
city = models.CharField("city",max_length=20)
我最喜欢第二种情况(我从 2004 年开始编写 python),对我来说它看起来更高效、清晰且易于理解。第一个场景(由现在编写 Python 代码的 Java/PHP 程序员提出)的优点是它可以帮助开发人员检测它在编写“常量”时犯了错误,因此更容易检测错误,也更容易和更快在不重构源代码的情况下对这类文本进行“大改动”。
我想知道您将编写或使用哪些源代码以及为什么。
谢谢,
【问题讨论】:
-
在我看来场景 1 太可怕了。
-
您根本不应该在那里使用“常量”,因为 数据库架构 也取决于这些。更改您的常量,您的架构需要迁移。第一种情况与 Pythonic 相差甚远。即使是简单的属性也会比方法做得更好。您的 Java/PHP 程序员出于类似 YAGNI 的原因引入了复杂性; 你不会需要它。
-
我会担心任何可以更轻松地在架构上实施“大规模更改” 的事情。