コントラクト間のデータ受け渡し
長文失礼します。
Ethereumに関する技術調査をしており、Solidityを使ったアプリケーションを作っているのですが、段階リリースを考慮して、コントラクトをデータと処理で分離したいと考えてます。
以下のようなイメージ
 Web3.js ⇒ 処理コントラクト ⇒ データコントラクト
サンプルのソースでは、2つのコントラクトを使用して、処理ファイル(TestLogic)から、データファイル(TestData)のデータ(testId)を更新・参照しようと試みています。
上記とした場合、更新することはできるのですが、参照することができません。
- Web3.jsから、TestLogic.insertDataを実行すると、TestData.testIdが正常に更新される。
 - Web3.jsから、TestData.getAを呼ぶと、戻り値「95」が返却される。
 - Web3.jsから、TestLogic.getDataを呼ぶと、戻り値「0」が返却される。★失敗
 
以下の2点をご教授いただけると幸いです。
- Solidityで、コントラクト間で外部コントラクトのデータを参照することは可能なのか。
 - コントラクトをデータと処理で分離するために、他に良い方法がないか。
 
TestLogic.sol
pragma solidity ^0.4.24;
// 呼び出す対象のコントラクトをimportする
import './TestData.sol';
contract TestLogic{
    TestData public testData;
    address public addressTestData;
    // コンストラクタで、TestDataコントラクトのアドレスを受け取り、Objectを保持する。(デプロイ時)
    constructor(address _testData) public{
        require(_testData != 0x0);
        addressTestData = _testData;
        // アドレスからTestDataのObjectに変換
        testData = TestData(_testData);
    }
    function insertData(uint32 id) public{
        testData.insertData(id);
    }
    function getData() public view returns(uint32){
        uint32 data = testData.getA();
        return data;
    }
}
TestData.sol
pragma solidity ^0.4.24;
contract TestData{
    uint32 public testId;
    constructor() public{
        testId = 95;
    }
    function insertData(uint32 id) public{
        testId = id;
    }
    function getA() public view returns(uint32){
        return testId;
    }
}