Doğrulanması gereken çok fazla veri olduğunda, yalnızca doğrulama amacıyla yeni bir sınıf oluşturmalı mıyım yoksa yöntem içi doğrulamaya sadık kalmalı mıyım?
Benim özel örneğim bir turnuvayı ve bir etkinlik / kategori sınıfını tasarlar: Tournament
ve Event
bir spor turnuvasını modelleyen ve her turnuvanın bir veya daha fazla kategorisi vardır.
Bu sınıflarda doğrulanacak her türlü şey vardır: oyuncular boş olmalı, benzersiz olmalı, her oyuncunun oynaması gereken maç sayısı, her maçın sahip olduğu oyuncu sayısı, önceden tanımlanmış eşleşmeler ve çok daha fazlasını içeren gerçekten büyük bir vb. karmaşık kurallar.
Sınıfların birbiriyle nasıl entegre olduğu gibi, bir bütün olarak doğrulamam gereken bazı bölümler de vardır. Örneğin, a'nın tek biçimli doğrulaması Player
iyi olabilir, ancak bir etkinliğin iki kez aynı oynatıcısı varsa, bu bir doğrulama hatasıdır.
Peki buna ne dersiniz ?: Model sınıflarımın ayarlayıcılarını ve veri eklemek için benzer yöntemleri kullanırken kesinlikle herhangi bir ön kontrolü unutuyorum ve bunun yerine doğrulama sınıflarının bunu yapmasına izin veriyorum.
Bu yüzden böyle bir şey olacak EventValidator
bir ile Event
bir üyesi olarak ve bir validate()
bütün üyelerin kurallarını geçerli kılmak için bütün nesneyi doğrular yöntemi artı tekil yöntemler.
Sonra, geçerli bir nesneyi somutlaştırmadan önce, yasadışı değerleri önlemek için doğrulamayı yürüteceğim.
Tasarımım doğru mu? Farklı bir şey yapmalı mıyım?
Ayrıca, boole dönen doğrulama yöntemleri kullanmalı mıyım? Ya da doğrulama başarısız olursa bir istisna atabilir misiniz? Bana en iyi seçenek boolean döndürme yöntemleri ve nesne örneklendiğinde istisna atmak gibi görünüyor, örneğin:
public Event() {
EventValidator eventValidator = new EventValidator(this);
if (!eventValidator.validate()) {
// show error messages with methods defined in the validator
throw new Exception(); // what type of exception would be best? should I create custom ones?
}
}