Managing common elements of Client/Server in C#

This is probably a bit generic rather than Unity-specific, but what is the correct/best way to deal with a situation where you’re splitting a game into 2 parts; a client and a server. In my case it’s an mmo, so the client is simply graphically displaying data the server sends it, and none of the core logic of the game is present. The server is the other way around - it contains the core logic but couldn’t care less about graphics.

So say I have a tree, or Plant, that’s common to both because it’s interactive. Rather than writing code twice, I thought i’d do this:

SharedComponents.Zone.Plant

Client.Zone.Plant inherits from SharedComponents.Zone.Plant

Server.Zone.Plant inherits from SharedComponents.Zone.Plant

This way, the base, common functionality is in the shared class, and the client or server specific functionality is added in the client/server.

Is this a good way to handle things, or is having the same name with different definitions really really stupid.

Does the server really need to know where the plant is? It should be a client only thing.

If you plan on colliding with the plant/tree, then the server should only know of the collider.

In case it has a collider, I suggest you simply save the entire scene with each objects position, rotation, scale, plus locations of mesh/texture/collider resources. You can then load mesh/texture/collider when starting the client, but only load collider when starting the server.