today I came across some weird case when thinking about naming my classes and using the right desing-patterns.
I was curious how you solve this?
So the situation is:
I got some views in general like: View-1, View-2, View-3 Each view got attributes like: mode and readonly. Mode can be "edit" or "show" and readonly is a boolean. So for each View I had following example data:
View 1 - edit - true View 1 - edit - false View 1 - show - true View 1 - show - false
Now I could assign a View to a WorkflowStep.. and this works fine right now. A WorkflowStep can have: buttons, views, actions and roles (in this case we just talk about the views).
The problem in this solution is.. that if I have more than one View, it gets a bit messy for the user, because he can choose from:
View 1 - edit - true View 1 - edit - false View 1 - show - true View 1 - show - false View 2 - edit - true View 2 - edit - false View 2 - show - true View 2 - show - false
etc.
As I'm developing in Laravel I used Polymorphic relationship with a table called: workflowstepable. So I could assign a view to a workflow step, and the workflowstepable-table looked like: workflow_step_id, workflowstepable_id, workflowstepable_type 1 | 1 | App\View
As this was a solution that has grown with the project.. i thought about a redesign. Right now the User has to choose from 8 views to drag and drop into a workflowstep. I would like to only show 2 views (View1, View2) to the User.. now he can drag and drop the view into a workflowstep.. and add further information like mode and readonly to only this specific ViewItem dropped into the Workflowstep.
I thought it would be better to split into following classes:
View: id, name, description
ViewItem: id, view_id, workflowstep_id, mode, readonly
WorkflowStep: id, order, etc.
So View would hold Views in general, like View1, View2 .. and ViewItem would bind the View to the WorkflowStep (1:1) and hold some more information like: mode, readonly.
Would ViewItem be a good name?
I would like to know if this is a common pattern, or if I'm missing something.
Thank you in advance
Aucun commentaire:
Enregistrer un commentaire