Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Design solution needed for Validation scenario

I would like to validate some objects. The validation has two parts:

  • validation whether the user has right to access the object (the specific rights are already calculated and stored in boolean values, there are maximum 4 roles)
  • checking if the object is in a certain state (from a set of states)

I have a lot of rules (actually around 25 in total ) like the ones below that need to be validated:

  • isOwner && (status == 11 || status == 13 || status == 14)
  • !(isOwner && isReceiver && status == 12)
  • .....

I have these rules spread out in several methods, 4 or 5 rules in a method. If a rule fails then the other rules do not get checked. I need to construct a validator (or set up an already constructed one) in every method that uses this validation.

I am looking for a design pattern that would make it easier to build a structure to validate objects. My goal is to be able to provide specific error messages. For instance if the validation failed because the user doesn't have rights then I want to let him/her know this. If it failed because the object's state then I want to display that .

First I though of the decorator pattern. I have an error message handler object that could be decorated with the specific error messages. One decorator would check for user rights and another one for states. But the order in which I am constructing my validator objects does not matter so the power of decorator pattern is not used. (AFAIK this is one big advantage of using decorator - mixing the decorations). I think a chain might be better for this case...?!?! What design alternative would you recommend for this scenario?

like image 247
Atticus Avatar asked Jul 16 '10 06:07

Atticus


People also ask

What is included in design validation?

Basics of Design Validation Process Activities can include: Comparing with similar equipment performing for similar purposes. Simulating functionality through mathematical modeling. Testing the final design to prove the system operates as defined in the user needs.

What is design validation plan?

What Is A Design Validation Plan? The Design Validation Plan lists methods used to ensure the Product Requirements have been properly specified so that the product meets Customer Needs. There are many types of design validation including product testing, market studies and calculations.

When should design validation be done?

Design validation is a key requirement when changes to a device are made after it has been released for production, sale, and use. According to 21 CFR Part 820.30 (i), ISO 13485:2003 Clause 7.3.


2 Answers

Instead of thinking about what pattern to use, think about what objects make sense, and what their behaviors should be.

In this case, what you want to do is pass an object to a series of rules. If it fails one of the rules, that will trigger a message, and the rest of the rules don't get checked (is that correct)?

If so, you'll notice that what we're not talking about a scenario where the data is passed to all of the rules in the chain... which is indicative of a chain of command pattern, rather than a decorator.

On the other hand, if you want to pass it to all of the rules, it sounds to me almost more like a visitor pattern.

Think of the ideal solution, and then identify the pattern. Don't start by trying to find a pattern to apply.

like image 104
kyoryu Avatar answered Sep 21 '22 15:09

kyoryu


I would use a chain of responsability. You make your object to pass through the chain.

like image 41
onof Avatar answered Sep 25 '22 15:09

onof