0

達成したいコードは次のとおりです。

  • ACharacterにはstrengthconstitution、およびその他の統計があります。
  • それぞれCharacterBaseStats彼のクラスに依存しています。
  • それぞれCharacterRandomStatsボーナスがあり、正の値は 0 から 3 です。
  • ステータスは 1 未満でも 10 未満でもありません。
  • A の統計に はとCharacterがある場合があります。BonusMalus
  • aCharacterが で 8 を持ちstrength、プラス 4 のボーナスと 1 のマイナスを持っている場合、彼は最終的に 10 を持っています (8+4-1=11 > 10)。
  • a のCharacter体質が 3 で、プラス 1 のボーナスと 4 のマルスがある場合、彼は最終的に 1 になります (3+1-4=0 < 1)。

私の .NET ソリューションでは、datasbuildersを別のプロジェクトに分けようとしています。現在、私のdatasプロジェクトには次のようなものがあります。

namespace Data.Entities.Characters
{
    public abstract class Character : Entity
    {
        public abstract EntityStats BaseStats { get; }
        public EntityStats RandomStats { get; }
    }
}

namespace Data.Stats
{
    public struct EntityStats
    {
        private Dictionary<EntityStat, int> _stats;
        public int this[EntityStat stat] { get { return _stats[stat]; } }

        public EntityStats(int strength, int constitution, /* ... */)
        {
            _stats = new Dictionary<EntityStat, int>();
            _stats.Add(EntityStat.Strength, strength);
            _stats.Add(EntityStat.Constitution, constitution);
            /* ... */
        }
    }
}

次に、builderwhich sum a がありList<EntityStatsます。

namespace Builder
{
    public class EntityStatsBuilder
    {
        private List<EntityStats> StatsList { get; set; }
        public EntityStatsBuilder() { StatsList = new List<EntityStats>(); }
        public void Add(EntityStats stats) { StatsList.Add(stats); }

        public EntityStats ToStats()
        {
            int strength = 0,
                constitution = 0, 
                /* ... */;

            foreach (EntityStats stats in StatsList)
            {
                strength += stats[EntityStat.Strength];
                constitution += stats[EntityStat.Constitution];
                /* ... */
            }

            // module FMath =
            //     let Clamp value min max =
            //         if value < min then min elif value > max then max else value
            return new EntityStats(
                FMath.Clamp(strength, 1, 10),
                FMath.Clamp(constitution, 1, 10),
                /* ... */
            );
        }
    }
}

私の問題は次のとおりです。

buildersのプロジェクトは私のプロジェクトを参照していdatasます。
エラー:クラスにFinalStatsプロパティを追加したいです。CharacterこれFinalStatsは私のEntityStatsBuilderクラスを使用する必要があります。次に、私のプロジェクトは私のdatasプロジェクトを参照する必要がありますbuilders

public EntityStats FinalStats
{
    get
    {
        EntityStatsBuilder builder = new EntityStatsBuilder();
        builder.Add(BaseStats);
        builder.Add(RandomStats);
        return builder.ToStats();
    }
}

この循環的な依存関係を持たないようにするには、グローバル アーキテクチャをどのように変更すればよいですか?

4

1 に答える 1