TDD - я должен проверить ограничения базы данных в моей модели домена? - PullRequest
0 голосов
/ 10 марта 2011

Должен ли я проверить ограничения базы данных в моем доменном объекте? Например. Если поле в базе данных является varchar (500) и является обязательным, должен ли я проверить это в своем коде? Или я должен просто положиться на попытку / поймать.

Это довольно большие накладные расходы, если их можно избежать.

* 1005 т.е. *

//partial method for a class generated by the Entity framework
[MetadataType(typeof(UserMetaData))]
public partial class User
{

}

public class UserMetaData
{
    [Required]
    [StringLength(500)]
    public string FirstName { get; set; }
}

// My domain object tests
// This test in particular will throw an expected exception, saying that the first name cannot be found
[TestFixture]
public class UserTest
{
    [Test]
    [ExpectedException(typeof(ValidationException), ExpectedMessage = "The FirstName field is required.")]
    public void user_should_require_first_name()
    {
        User user = new User();
        user.Id = 0;
        user.MiddleName = "x";
        user.IsAdmin = true;
        user.LastName = "James";
        user.Password = "password";
        user.Title = "Mr";
        user.Username = "jamesbrown";
        user.Email = "jamesbrown@somewebsite.com";

        TestsHelper.ValidateObject(user);
    }
}

Ответы [ 2 ]

0 голосов
/ 10 марта 2011

ИМХО, модель домена не подходит для таких проверок. Если вы хотите предоставить пользователю более значимое сообщение об ошибке, чем текст исключения из базы данных, добавьте проверку входных значений на свой уровень пользовательского интерфейса, то есть на ViewModel или Controller.

0 голосов
/ 10 марта 2011

В общем, try ... catch наиболее эффективен при работе с исключениями из правила. Это также означает, что вам нужно только изменить / добавить правило в БД, а не в БД и код.

...