OOP Tasarım - Nerede / Ne zaman özelliklerini doğrulamak mı?

7 Cevap php

Ben Dört cepten DDD / PoEAA / Gang ilgili birkaç kitap okudum ve bunların hiçbiri doğrulama konuyu kapsayacak gibi görünüyor - o zaman bu verilerin geçerli olduğu varsayılır gibi görünüyor.

Ben bir müşteri sadece bir etki alanı nesnesi üzerinde bir valid özelliği değerini ayarlamaya çalışırsanız gerektiğini bu yazı (OOP Design Question - Validating properties) için cevaplardan toplamak.

http://bytes.com/topic/php/answers/789086-php-oop-setters-getters-data-validation#post3136182: Bu kişi cevapsız kalır benzer bir soru sordu

So how do you ensure it is valid? Do you have a 'validator method' alongside every getter and setter?

  • IsValidName ()
  • isimAta ()
  • getName ()

Ben cepten veri doğrulama ile ilgili bazı önemli temel bilgileri eksik görünüyor - ayrıntılı olarak bu konuyu kapsayan bir kitap beni işaret edebilir? - Örneğin,. İstisnalar veya vs kullanmak için doğrulama / değişmezleri farklı / işleme feedback / kaplama

7 Cevap

Insan / kullanıcı girişi olduğu yerde benim deneyim, doğrulama oluşur. Bir şeyi değiştirmek için yöntem aracılığıyla izin nerede ve bu genellikle olur. Sizin örnekte, ben yöntemi için doğrulama için giderdim:

setName()

Eğer izin nereye kadar Olur değerler / çıkıyor ayarı değerleri setter methods. giriş

Bu etki alanı nesnenin değişmezler duygusu (her zaman memnun olmalıdır) ve geçerli ayırt etmek önemlidir bazı insanlar geçersiz "contextual validation." Örneğin, negatif bir banka hesabı olan bir müşteri?" "Hayır diyoruz , ancak işlemlerin belirli tür gerçekleştirmek için yetkili olmayabilir. İşte contextual validation, tamamen doğrulama farklı bir türü olan "her müşteri varlık, boş olmayan bir kimliği olması gerekir" aksine.

Değişmezler uygulamak için tek etkili teknik etki alanı nesneleri kullanıcı girişi temsil ve etki nesneler üzerinde (örneğin basit bir set erişimciler) sınırsız mutators bırakmayın sınıfları ayırt etmektir.

Örneğin, bir Student alanı nesnesi varsa, kullanıcı arayüzünde doğrudan işlemek yoktur. Bunun yerine Student örnekleri oluşturma, görüşleriniz StudentBuilder örnekleri oluşturmak için geçerli bir Student etki alanı nesnesini oluşturmak için gerekenleri modeli.

Sonra, oluşturucu örnekleri alanı nesnenin değişmezler uygun doğrulamak sınıfları ve inşaatçılar kabul alır ve geçerli etki alanı nesneleri onları dönüştürecek bir fabrika var. (Ayrıca uygun olarak, bu aşamada bağlamsal doğrulama stratejileri tanıtabilirsiniz.)

Her nesne kendi iç durum tutarlı olduğundan emin olmak gerekir, bu yüzden iç durumu değiştirilmeden önce doğrulama en iyi şekilde yapılır - nesnenin setter yöntemleri.

Kısacası, her zaman doğrulamak. Uzun değil, 'yol boyunca', bir kerede tüm birlikte doğrulamaları gerçekleştirin. Bu kod aerodinamik kalmasına yardımcı ve karışıklık hata ayıklama yardımcı olacaktır.

Eğer sınıfını kullanan kod kontrol ederseniz, o zaman bile (kamu özellikleri aracılığıyla) nesnenin değişkenlerini işlemek denemeden önce doğrulama yapılmalıdır. Eğer sınıf kullanılacak nasıl bilmiyorum bir senaryo tahmin ediyorsanız, o zaman evet, özelliği içinde doğrulamak gerektiğini, onlar için ne daha fazla ya da daha az bulunuyor. Açıkçası bu nesneye doğasında statik bir iş kuralı olan "geçerli bir adıdır" tanımını varsayar.

Iki düzeyde doğrulayarak, elbette gitmek için en güvenli yoldur.

Wikipedia Ben sadece Wikipedia yüzeyi ve bağlantı çizeceklerinden daha detaylı açıklamalar olduğu gibi, bu, programlama tarzınıza bağlıdır. (Evet, ben BU tembel. :-))

NOT: Tüm bu kullanıcı girişi için geçerli DEĞIL. Ya bir şekilde bunu doğrulamak zorunda. Ben sadece herhangi bir şekilde kullanıcı girişi ile birleştiğinde olmamalıdır iş mantığı sınıflar bahsediyorum. :-)

  • Savunma

Başkaları tarafından belirtildiği gibi, kendi sınırları her özellik zorlar. Ben genellikle bu hataları belirtmek için çalışma zamanı istisnaları (Java) attı.

Wikipedia on Savunma Programming

  • Sözleşme tarafından

Örneğin, sizin ayarlayıcıları geçirilen değerler tanımlanmış sözleşmeye ilişkin geçerli, sizin kod gereksinimleri belgelemek ve varsayalım. Bu size Demirbaş kodu bir sürü kaydeder. Yasadışı bir değer verildi Ama hata avcılık biraz daha zor olacaktır.

Wikipedia on Design by Contract

OOP önemli bir kısmı, geçerli bir devlet içinde nesneyi tutmak her zaman çok olduğunu. Bu nedenle, doğrulama nesneyi değiştirmek verebilecek bir giriş sonra yapılmalıdır.

Bu fonksiyonları ve yapıcı özellikleri / seti, parametrelerden geliyorsun verileri doğrulamak için her zaman iyidir.