長文失礼します。

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点をご教授いただけると幸いです。

  1. Solidityで、コントラクト間で外部コントラクトのデータを参照することは可能なのか。
  2. コントラクトをデータと処理で分離するために、他に良い方法がないか。

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;
    }
}