Как интерфейс входит и разъединяет два тесно связанных метода? - PullRequest
0 голосов
/ 04 июня 2018

У меня есть следующие коды, чтобы помочь мне объяснить, что у меня проблемы с концепцией развязки.

например;

async getSomething(id: number): Promise<boolean> {
 if(id === "111") {
  return true;
 }
 else {
  return false;
 }
}

someFunc(): void {
 let id="123";
 if (getSomething(id)) {
  console.log("do somthing special");
 }
 else {
  console.log("sleep");
 }
}

из этого ответа на другой вопрос развязки

Мы используем интерфейс для разделения двух методов, но у меня возникают проблемы с отображением взаимодействия между этими двумя методами независимо друг от друга.

Например;

export namespace Special {
 export interface MagicDay {
  isMagic: boolean;
 }
}
...

async getSomething(id: number): Promise<Special.MagicDay> {
 if(id === "111") {
   // here what I think is different from before
   // we create an object which we store our boolean
   // so in some future we can the way we implement this function
   // it is ok because we still have the **isMagic** that **someFunc** needs
  return {isMagic: true};
 }
 else {
  return {isMagic: false};
 }
}

someFunc(): void {
 let id="123";
 let someDay = getSomething(id);
   // different is now
   // we receive an object 
   // so what happens in the backend we don't need to worry about it
   // as long as we have the **isMagic** returns here
   // but what makes this decoupling which we still need the value from 
   // get something
 if (someDay.isMagic) {
  console.log("do somthing special");
 }
 else {
  console.log("sleep");
 }
}

Я комментирую то, что думаю внутри кода * выше, где, как мне кажется, у меня больше всего проблем.

Я прочитал эту статью о том, почему мы должны использовать разделение , и я понимаю, почему, но когда дело доходит до реализации, меня беспокоит идея, потому что я продолжаю думать, как работает разделениесделать одного независимым от других, но нам все еще нужен вклад, чтобы заставить его работать?

спасибо заранее.

1 Ответ

0 голосов
/ 04 июня 2018

Точки, сделанные в в этом ответе , не обязательно относятся к TypeScript, поскольку TS использует структурную типизацию .database: Database не обязательно должен быть экземпляром Database, чтобы соответствовать типу Database.Они уже не тесно связаны.Пока типы Database и IDatabase одинаковы, IDatabase не требуется. Интерфейс

MagicDay не разъединяет этот фрагмент кода.boolean тип был только что заменен на { isMagic: boolean } тип.Не имеет смысла отделять один метод от другого, если они принадлежат одному и тому же классу.Можно было бы разъединить несвязанные функции:

type TGetSomething = (id: number) => Promise<boolean>;

const getSomething: TGetSomething = async (id: number) => {
 if(id === "111") {
  return true;
 }
 else {
  return false;
 }
}

function async someFunc(callback: TGetSomething): Promise<void> {
 let id="123";
 if (await callback(id)) {
  console.log("do somthing special");
 }
 else {
  console.log("sleep");
 }
}

someFunc(getSomething);

Если эти функции на самом деле являются методами, развязка, вероятно, должна выполняться на уровне класса.Разделение в первую очередь упоминается как принцип ООП в упомянутых источниках.

...