Я решил, что мне нравятся варианты использования стиля Cockburn, как описано Fowler в его книге, озаглавленной "Дистиллированный UML". Мне нравятся они достаточно, что я создал экспериментальный способ встроить их непосредственно в пространства имен C#.
Путем выполнения этого я мог закодировать бизнес или логику UI с точки зрения английского содержания языка вариантов использования бесплатно, не имея необходимость писать любой вид предметно-ориентированного языка. Самое непосредственное преимущество было то, что я улучшил удобочитаемость кода (альбит в очень новом и тайном способе). Это - все еще экспериментальный подход. Однако я полагаю, что это могло быть полезно.
Здесь ссылка на вопрос, который я отправил при попытке найти другие способы сделать то, что я сделал.
По поводу вашего первого вопроса: Вам следует посмотреть на unique_topting , так как это может решить вашу проблему.
class Rating(models.Model):
content = models.OneToOneField(Content, primary_key=True)
ip = models.CharField(max_length=200, blank=True)
rating = models.IntegerField(default=0)
class Meta:
unique_together= (('content', 'ip'),)
Об индексах: вам не нужно ничего делать для содержимого
, поскольку это первичный ключ, он будет проиндексирован. Для ip
просто добавьте db_index = True
к вызову конструктора CharField
:
ip = models.CharField(max_length=200, blank=True, db_index=True)
Подробнее о db_index и других параметрах поля здесь
Кстати, если, как следует из вашей терминологии, вы используете IP-адреса для обозначения личности пользователей, пожалуйста, не - это очень ужасная идея. Пользователи, входящие через своего интернет-провайдера, будут менять свои IP-адреса в случайное время, поэтому они могут проголосовать дважды; пользователи портативных компьютеров, подключающиеся к различным кафе, библиотекам и т. д., всегда будут иметь разные IP-адреса; пользователи, совместно использующие соединение (например, соседи по квартире), или даже каждый из пользователей, приходящих из университетского городка, могут получить один и тот же IP-адрес через NAT, поэтому только один сможет проголосовать ... трудно представить -)
Если ваше использование имени ip
в поле «идентификатор пользователя» случайно и не имеет ничего общего с использованием там IP-адресов, я прошу прощения ,