I am using a data separation pattern, keeping my data in a contract and the business logic in a separate contract that calls the storage one to add/update/delete records. In order to send the Data struct as an argument in those CRUD functions, would it be acceptable to create a third "types" contract and inherit the types both from "logic" and "storage" contracts? ``` // Types.sol contract Types { struct Data { ...attributes } } ``` ``` // Logic.sol contract Logic is Types { function someFunction(type1 param1, type2 param2) { Data data = Data(param1, param2); storage.someFunction(data); } } // Storage.sol contract Storage is Types { function someFunction(Data data) onlyLogic { ... } } ```