0

画像サイズの計算を行う基本クラスがあります。私はそれからクラスを派生させており、コードで使用される定義済みの画像サイズを持っています。自分が持っているものが機能している一方で、私はそれを適切に行っていないという強い感覚を持っています.

理想的には、DerviedClass.PreviewSize をパラメーターとして GetWidth に渡し、そのインスタンスを作成する必要はありません。

class Program
{
    static void Main(string[] args)
    {
        ProfilePics d = new ProfilePics();
        Guid UserId = Guid.NewGuid();

        ProfilePics.Preview PreviewSize = new ProfilePics.Preview();
        d.Save(UserId, PreviewSize);
    }
}

class ProfilePicsBase
{
    public interface ISize
    {
        int Width { get; }
        int Height { get; }
    }

    public void Save(Guid UserId, ISize Size)
    {
        string PicPath = GetTempPath(UserId);
        Media.ResizeImage(PicPath, Size.Width, Size.Height);
    }
}

class ProfilePics : ProfilePicsBase
{
    public class Preview : ISize
    {
        public int Width { get { return 200; } }
        public int Height { get { return 160; } }
    }
}
4

2 に答える 2

7

より柔軟な実装が必要なようです-常にISize同じ値を返す実装を持つことは、かなり無意味に思えます。一方で、常にプレビューに使用するサイズを取得する簡単な方法が必要であることもわかります。私は次のようにします:

// Immutable implementation of ISize
public class FixedSize : ISize
{
    public static readonly FixedSize Preview = new FixedSize(200, 160);

    private readonly int width;
    private readonly int height;

    public int Width { get { return width; } }
    public int Height { get { return height; } }

    public FixedSize(int width, int height)
    {
        this.width = width;
        this.height = height;
    }
}

次に、次のように記述できます。

ProfilePics d = new ProfilePics();
Guid userId = Guid.NewGuid();

d.Save(userId, FixedSize.Preview);

FixedSizeこれにより、呼び出すたびに の同じインスタンスが再利用されます。

于 2009-04-05T06:32:54.157 に答える
3

必要に応じて、これを行う方法がいくつかあります。別のインターフェース、セットアップを行うことを検討します。このようなもの。

public interface ISizedPics
{
    int Width {get; }
    int Height {get; }
    void Save(Guid userId)
}
public class ProfilePics, iSizedPics
{
    public int Width { get { return 200; } }
    public int Height { get { return 160; } }
    public void Save(Guid UserId)
    {
        //Do your save here
    }
}

次に、これが完了したら、実際にこのように操作できます。

ISizedPics picInstance = new ProfilePics;
Guid myId = Guid.NewGuid();
picInstance.Save(myId);

これは 1 つの方法にすぎません。必要に応じてインスタンスを宣言するのに役立つファクトリ クラスを簡単に作成できるので、私はこの方法が気に入っています。

于 2009-04-05T06:27:26.900 に答える