Професионална програма
Loading...
CharlieScarver avatar CharlieScarver 33 Точки

[C# OOP] Unnecessary Interface

Правим игра на MonoGame по ООП.
Структурата за момента ни е: http://puu.sh/lJWhe/da1444f8cb.png
Имаме интерфейс IDrawable, който изглежда така:

public interface IDrawable<br>     {

        Texture2D SpriteSheet { get; }

        int TextureWidth { get; }

        int TextureHeight { get; }

        void Draw(SpriteBatch spriteBatch);<br>     }

SpriteSheet, TextureWidth и TextureHeight се използват единствено в най-конкретните класове. (Aya в случая).
Не можем да преценим дали интерфейсът е излишен.
Може ли помощ, съвет, мнение.

Малко обяснение относно кога е добре нещо да се отдели в интерфейс и има ли смисъл от интерфейс над абстрактен клас също няма да е излишно.
Благодаря

1
Advanced Level: Front-End
kosio197 avatar kosio197 104 Точки

Наскоро и аз си задавах същия въпрос и след като ми обясниха хора с голям опит ето извода:

Обикновенно не е добре "нещо да се отдели в интерфейс". Тръгва се от самия интерфейс. Със сигурност няма смисъл за всеки клас да пишеш интерфейс. Ако обаче пишеш някаква функционалност, която налага използването на методи независимо от конкретиката на тяхната имплементация тогава пишеш интерфейса и то без имплементации на него в началото - пишеш го, ползваш го за функционалността си и едва тогава правиш  конкретната имплементация. В случая, ако ти пакетираш този проект и го дадеш на друг да го ползва (примерно няколко екипа разработвате играта и ти го дадеш на друг екип) този екип ще може ли имплементирайки само този интерфейс да нарисува примерно нов герой в играта(не знам конкретиката, но идеята е имплементирайки един или няколко интерфейса да може да се направи нещо завършено)? - Ако отговора е да - има смисъл от интерфейса, ако отговора е не - два варината: 1. няма смисъл от него; 2. има смисъл от него, но не не добре написан(ей това може да се поучи когато интерфейс е изваден от клас, а не е мислен като самостоятелна еденица) .

 

 

3
CharlieScarver avatar CharlieScarver 33 Точки

Благодаря. Много хубаво обяснение.

0