0

ドメイン オブジェクトでデータベースの制約をテストする必要がありますか? たとえば、データベースのフィールドが varchar(500) で必須の場合、コードでこれをテストする必要がありますか? それとも、try/catch に頼るべきでしょうか。

回避できれば、作業のかなり大きなオーバーヘッドになります。

いえ

//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);
    }
}
4

2 に答える 2

0

一般に、ルールの例外を処理する場合は、try...catchが最も効率的です。また、DBとコードではなく、DBでルールを変更/追加するだけでよいことも意味します。

于 2011-03-10T00:10:05.200 に答える
0

私見、ドメイン モデルは、このようなチェックを行うには不適切な場所です。データベースからの例外テキストよりも意味のあるエラー メッセージをユーザーに提供したい場合は、入力値の検証を UI レイヤー、つまり ViewModel または Controller に追加します。

于 2011-03-10T07:47:18.547 に答える