2 Stimmen

Klasse, Schnittstelle, Generika .... müssen vereinfacht werden

Zurzeit habe ich dieses Stück Code für meine Klasse "Mitarbeiter". Aber ich habe fast das gleiche für "Kunde" und alle anderen.

Gibt es eine Möglichkeit, ein Äquivalent zu meiner Klasse "EmployeeRepository" zu erstellen, aber mehr so etwas wie dieses MyRepo<Employee>, aber implementieren IEmployeeRepository in diesem Fall, ICustomerRepository, wenn ich dieses MyRepo<Customer> tun. Natürlich gibt die get-Methode Employee, Customer oder andere ...

public class EmployeeRepository : NHRepository<Employee>, IEmployeeRepository
{
    public Employee Get(Guid EmployeeId)
    {
        return base.Get(EmployeeId);
    }
}

public interface IEmployeeRepository : IRepositoryActionActor<Employee>
{

}

public interface IRepositoryActionActor<T>
{
    T Get(Guid objId);
}

2voto

PVitt Punkte 11132

Ja, wie Spencer Ruport bereits erwähnt hat, sammeln Sie Ihren Code in einer Schnittstelle oder abstrakten Basisklasse, wie ich es getan habe:

public interface IPerson
{
    void DoSomething( );
}

public abstract class Person : IPerson
{

    public virtual void DoSomething( )
    {
        throw new NotImplementedException( );
    }
}

public class Employee : Person
{
    public override void DoSomething( )
    {
        base.DoSomething( );
        /* Put additional code here */
    }
}

public class Customer : Person { }

public class PersonRepository<T> : System.Collections.Generic.List<T> where T : IPerson, new( )
{
    public T Get( Guid id )
    {
        IPerson person = new T( );
        return (T)person;
    }
}

1voto

Russell Punkte 17003

Sie können - außer Sie würden die IEmployeeRepository-Schnittstelle auch generisch machen, so dass Sie haben würden:

public class MyRepo<U> : NHRepository<U>, IRepository<U>
{
...

}

public interface IRepository<T> : IRepositoryActionActor<T>
{

}

public interface IRepositoryActionActor<T>
{
    T Get(Guid objId);
}

Ich hoffe, das hilft :)

1voto

Spencer Ruport Punkte 34547

Zurzeit habe ich dieses Stück Code für meine Klasse "Mitarbeiter". Aber ich habe fast das Gleiche für "Kunde" und all die anderen.

Finden Sie heraus, was sie gemeinsam haben, geben Sie diesem Datensatz einen Namen und erstellen Sie eine Schnittstelle dafür. Meiner Meinung nach würde IPerson wahrscheinlich funktionieren.

Dann können Sie ein get person-Repository erstellen, das ein IPerson-Objekt zurückgibt, das entweder ein Mitarbeiter oder ein Kunde sein kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X