vendredi 3 janvier 2020

Extending interface signature without editing code in multiple places

I have an interface and existing code which implements this interface:

public interface IBusinessService<T> where T : class
{
    Task Add(T category);

    Task Delete(T category);

    Task Update(T category);

    Task<IEnumerable<T>> GetAll();

    Task<T> GetById(int id);     
}

Now we need that id parameter can be type of Guid. It would be ideal if it is possible:

public interface IBusinessService<T> where T : class
{
    /* ... the other code is omitted for the brevity */
    Task<T> GetById(Guid or int id );     
}

What I thought to implement is to create a new method with parameter type of Guid:

public interface IBusinessService<T> where T : class
{
    Task Add(T category);

    Task Delete(T category);

    Task Update(T category);

    Task<IEnumerable<T>> GetAll();

    Task<T> GetById(int id);     

    Task<T> GetById(Guid id);     
}

But if I will do this, then I need to edit so many code. So it looks like it is not a good solution.

Is there a way to add another type of id to the interface method GetById without breaking changes?

Aucun commentaire:

Enregistrer un commentaire