إعادة بيع ديون: العثور على تجريد مشترك

لقد حصلت على هذه الشفرة الموروثة التي أحاول أن أعيد تراصفها في الوقت الحالي:

    public class FileManger
    {
        private IFileReader _fileReader;
        private IFileWriter _fileWriter;

        public enum Mode { Read = 1, Write = 2 };

        public void Open( Mode mode)
        {
            if (mode == Mode.Read)
            {
                _fileReader = new FileReader();
            }
            else if (mode == Mode.Write)
            {
                _fileWriter = new FileWriter();
            }
        }
    }

أحتاج إلى أن أكون قادرًا على استبدال هذه الشفرة بطريقة مصنع وتخصيصها إلى نموذج مشترك.

so.. I'm trying to make it look like:

public class FileManger
{
    private IFileHوler _fileHوler;

    public enum Mode { Read = 1, Write = 2 };

    public void Open(string fileName, Mode mode)
    {
        _fileHوler = Factory.CreateFileHوler(mode);
    }
 }

المشكلة لدي هي الواجهات الأصليتين IFileReader و IFileWriter ، على الرغم من أنها أقرب إلى الشكل في بعضها البعض ، لديهم سلسلة أساليب مختلفة تماماً ReadLine ()؛ وإبطال WriteLine (سطر السلسلة)؛ التي لم أتمكن من العثور على مظاهرة مشتركة.

أساسا بلدي ديوكتوريرينج الهدف هو جعل واجهات IFileReader و IFileWriter تبدو نفسها واستخدام واجهة مشتركة بدلاً من اثنين.

حاليا هذه الواجهات تبدو مثل هذا:

 public interface IFileReader : IDisposable
    {
        void OpenFileStream(string fileName);
        void Close();

        string ReadLine();
    }

و

public interface IFileWriter : IDisposable
    {

        void OpenFileStream(string fileName);
        void Close();

        void WriteLine(string line);
    }

هل يمكن أن يعطيني شخص ما بعض الاقتراحات حول كيف يمكنني تحقيق ذلك؟

Please let me know if you need any further clarifications, if I made it unclear to understو.

2
Barth. شكرا على تعليقك. هل ترى أي طريقة أخرى يمكنني تحسين تصميم هذا الرمز؟
وأضاف المؤلف Eranga Dissanayaka, مصدر
لا أعتقد أنه يجب البحث عن تعميم بين IFileReader و IFileWriter. يبدو أن واحد هو حصرا للمدخلات ، والآخر حصرا للإخراج. لذا ، لن أحاول أن أجبرهم على أن يكونوا متشابهين.
وأضاف المؤلف S.L. Barth, مصدر
جلالة ... ليس لهذا المقتطف ، للأسف.
وأضاف المؤلف S.L. Barth, مصدر

1 إجابة

لا أستطيع حقاً معرفة السبب وراء رغبتك في استخدام واجهة مشتركة لهذه العمليات المختلفة ، ولكن بافتراض أن لديك أسبابًا وجيهة لذلك ، أعتقد أنه يمكنك فعل شيء كهذا ، حيث يمكن قراءة line أو كتابة ، اعتمادا على وضع الملف:

public interface IFileAccessor : IDisposable
{
    void OpenFileStream(string fileName);
    void Close();
    void TransferLine(ref string line);
}
1
وأضاف