Has anybody done thing cloning or mirroring? Any good practices there?
I have a situation where a client can be either standalone (no user assigned) or with a user connected - for the cases where some users want to participate actively in the system and review the jobs done and others just are there for keeping track of jobs done for them without the need for their input. To each their own and so on…
But from that approach comes the challenge. There are a bunch of objects being tracked and they can be either assigned to the client thing or to user.
Now there should also be possibilities to group these things as needed. When there is no user connected, it’s simple. The service provider keeping track of client and jobs will manage the groups. But when a user is there, it should be possible for them to manage the groups and the changes should be reflected on the service provider side. What would be the best way to achieve that?
Don’t know if I get it correctly. Could you build the logic around the Client thing and the just add a Client thing to the User, thus removing the need for cloning?
That would be lovely, however the same user can potentially be a client of several service providers. Thus using the same logic could make things really messy.
I guess another possibility would be to create double workflows based on whether the client has a connected user or not. That, however, makes things a bit messy too, especially when future updates and new features will need to be built upon messy base. Hrmph.
The double workflows won’t really work in this case as there are things that need to be unique for the client instance from the viewpoint of each possible service provider. And also there are things that service provider would want to mark up and modify (about the people doing the work etc) that the client user has no need to have any knowledge about. However there are some things that need to be visible to the client user such as status of certain jobs and the costs of work.
I’m currently leaning towards two different types of things and somehow syncing relevant data to the other when one of them changes.