達成したいコードは次のとおりです。
- A
Character
にはstrength
、constitution
、およびその他の統計があります。- それぞれ
Character
がBaseStats
彼のクラスに依存しています。- それぞれ
Character
にRandomStats
ボーナスがあり、正の値は 0 から 3 です。- ステータスは 1 未満でも 10 未満でもありません。
- A の統計に はと
Character
がある場合があります。Bonus
Malus
- a
Character
が で 8 を持ちstrength
、プラス 4 のボーナスと 1 のマイナスを持っている場合、彼は最終的に 10 を持っています (8+4-1=11 > 10)。- a の
Character
体質が 3 で、プラス 1 のボーナスと 4 のマルスがある場合、彼は最終的に 1 になります (3+1-4=0 < 1)。
私の .NET ソリューションでは、datas
とbuilders
を別のプロジェクトに分けようとしています。現在、私の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);
/* ... */
}
}
}
次に、builder
which 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();
}
}
この循環的な依存関係を持たないようにするには、グローバル アーキテクチャをどのように変更すればよいですか?