이 질문을 올바르게 표현하지는 못했지만 의도를 잘 이해할 수 있습니다.참조 어셈블리를 기반으로 사용할 수있는 특성을 제한하십시오.
세 개의 프로젝트가있는 응용 프로그램이 있습니다. 프로젝트 1은 애플리케이션의 웹 지향적 인 부분입니다. 프로젝트 2는 정보에 액세스하기위한 API입니다. 프로젝트 3은 데이터베이스에 액세스하여 정보를 얻고 해당 정보를 호출자에게 반환하는 부분입니다.
프로젝트 1에서 웹 사이트에서 사용할 정보에 액세스하고 수정하기 위해 프로젝트 3의 개체에 포함 된 메서드를 호출합니다. 예를 들어 Project 1에서 ProjectID.classes.myObject.getObject (2)를 호출하여 objectID 2에 대한 데이터베이스 쿼리를 기반으로 myObject의 인스턴스를 가져옵니다.
myObject는 프로젝트 1에서이 속성을 사용할 수 있습니다.이 속성은 모두 웹 사이트에서 반드시 볼 수있는 것은 아닙니다. 많은 것은 프로젝트 1에서 내부적으로 사용됩니다.
이제 Project 2에서이 정보를 API 호출을 통해 반환 할 수 있기를 바랍니다. . 예를 들어/controllers/myObject/2를 사용하여 API를 호출하면 Project3.classes.myObject.getObject (2)가 호출됩니다. 그러나 Project 2에서 호출 할 때 반환되는 특성을 제한하고 싶습니다.
나는 이것을 Project 2에서 반환 된 객체를 래핑하고 실제적으로 API 호출에서 반환되는 방식으로 제한함으로써이를 수행 할 수 있음을 알고있다. 그러나 Project 3 내에서이 작업을 수행 할 수있는 방법이 있습니까?
"공용"으로 특성을 선언 할 때 해당 특성을 호출하는 모든 어셈블리에서 사용할 수 있으며 "내부"로 만들면 포함 된 어셈블리에서만 사용할 수 있다는 것을 알고 있습니다. 특정 어셈블리 만 호출하는 "모든"어셈블리 대신 사용할 수있는 수정자가 있습니까?
아니면 완전히 잘못된 생각입니까?
정확하게 내가 원하는 것 같습니다. 좋은 디자인이 아니라고 생각하는 이유에 대해 조금 더 명확히 해줄 수 있습니까? –
나는 코드가 매우 불분명하고 유지하기가 어렵다고 생각한다. 내부는 물건을 내부에 유지하도록 설계되었으며이 속성은 원래 내부 클래스의 단위 테스트를위한 것입니다. 각기 다른 용도와 공장을위한 2 개의 인터페이스를 생성하고 전체 구현을 내부적으로 유지하는 것이 훨씬 명확합니다. –