질문을 삭제하지 말아주세요.!
 
1
0
-1

최범균님의 객체지향과 디자인 패턴 공부중에 궁금한 사항이 있어서요

데이터를  1.읽고 / 2.암호화 / 3.쓰기 

이렇게 크게 3가지 클래스가 있는데

이중에서 1.읽고 클래스에서  처음에는 url 에서 읽다가 파일로 읽는 부분이 추가가 됬습니다.

그래서 인터페이스를 하나 만들고 아래와 같이 작성이 되었는데요.


고정으로 들어가 있는 filedata.txt 를 어떻게 한곳에서 관리할수 있을까요?

ps.코드 들여쓰기를 했는데 안나오네요. T.T




interface DataSource {
public function read();
}


class DataSourceFactory {

static public function create() {
if( self::useFile() ) {
return new FileDataReader();
}
else {
return new UrlDataReader();
}
}

static public function useFile() {

if( file_exists("filedata.txt") ) return true;
else return false;
}

/*

//싱글톤 패턴 적용
//private static $instance = new DataSourceFactory();
public static function getInstance() {
if( ! isset() )

//return self::$instance;
}
*/


}

class FlowController {

public static $useFile = 'filedata.txt';
public $page;

public function process() {
 /*
if( self::$useFile ) {
$source = new FileDataReader();
$page = $source->read();
}
else {
$source = new UrlDataReader();
$page = $source->read();
}
*/
    $source = DataSourceFactory::create();
 $page = $source->read();
echo $page;


$encryptor = new Encryptor();

$writer = new FileDataWriter();

}
}

class FileDataReader implements DataSource {
public $page;

public function read() {
$this->page = implode("", file("filedata.txt"));
return $this->page;
}
}

class UrlDataReader implements DataSource {
return 'url에서 데이터 가지고 옴';
}

class Encryptor {

}

class FileDataWriter {

}


$ps = new FlowController();
$ps->process();








    CommentAdd your comment...

    2 answers

    1.  
      1
      0
      -1

      [수정] 급하게 쓰다보니, 코드가 틀려서 약간 수정합니다.

      최상위 (가장 바깥 쪽)에서 하위로 인자를 넘겨 주면 될 것 같습니다.

      1) FlowController에 const FILE = 'filedata.txt'를 선언한다. 또는 FlowController의 생성자에서 파일명을 받는 방법도 있겠네요.

      2) $source = DataSourceFactory::create(self::FILE);

      3) 팩토리에서 파일 패쓰를 받을 수 있도록 수정

      public static function create(string $path = null)
      {
      	if (null !== $path) {
      		return new FileDataReader($path);
          } else {...}
      }

      4) FileDataReader에 생성자 추가

      private $path;
      
      
      public function __construct(string $path = null)
      {
      	$this->path = $path;
      }
      
      
      public function read()
      {
      	if (! file_exists($this->path)) {
      		throw new \Exception('파일이 없습니다.');
          }
      
      
      	return file_get_contents($this->path);
      }
        CommentAdd your comment...
      1.  
        1
        0
        -1

        상수로 관리하면 안될까요?

          CommentAdd your comment...