소프트웨어 공학

시스템 개발 수명주기 내에서 작업하는 전문가, 학자 및 학생을위한 Q & A

5
전략 패턴과 의존성 주입을 사용하여 상속을 완전히 대체 할 수 있습니까?
예를 들면 다음과 같습니다. var duckBehaviors = new Duckbehavior(); duckBehaviors.quackBehavior = new Quack(); duckBehaviors.flyBehavior = new FlyWithWings(); Duck mallardDuck = new Duck(DuckTypes.MallardDuck, duckBehaviors) Duck 클래스에는 모든 비헤이비어 (추상)가 포함되어 있으므로 새 클래스를 만드는 MallardDuck(확장 Duck) 필요하지 않은 것 같습니다. 참조 : 헤드 퍼스트 디자인 패턴, 1 장.

6
Dependency Injection에 대한 최상의 정의는 무엇입니까?
누군가 나에게 다가 가서 개념적 방식으로 Dependency Injection을 정의하고 소프트웨어 디자인에서 DI를 사용하는 실제 장단점을 설명하도록 요청할 때마다. 나는 DI의 개념을 설명하기가 어렵다고 고백합니다. 나는 그들에게 단일 책임 원칙, 상속에 대한 구성 등에 관한 역사를 말할 필요가있을 때마다. 누구나 개발자를 위해 DI를 설명하는 가장 좋은 방법을 설명하는 데 도움을 줄 …

5
관계형 데이터베이스 (예 : PostgreSQL)에 대한 트리거가 실제로 필요합니까?
데이터베이스를 일관성있게 유지하기 위해 트리거를 사용하여 저장된 데이터의 유효성을 검사 할 수 있습니다. 그러나 데이터베이스에 데이터를 저장하기 전에 애플리케이션 측에서 데이터 유효성 검증을 수행하지 않는 이유는 무엇입니까? 예를 들어 클라이언트를 저장하고 DDL 수준에서 쉽게 수행 할 수없는 일부 유효성 검사를 수행하려고합니다. https://severalnines.com/blog/postgresql-triggers-and-stored-function-basics 또 다른 예는 감사입니다. 최신 정보 트리거와 데이터베이스 …

4
함수를 호출하는이 방법이 나쁜 습관입니까?
다음 코드가 있습니다. public void moveCameraTo(Location location){ moveCameraTo(location.getLatitude(), location.getLongitude()); } public void moveCameraTo(double latitude, double longitude){ LatLng latLng = new LatLng(latitude, longitude); moveCameraTo(latLng); } public void moveCameraTo(LatLng latLng){ GoogleMap googleMap = getGoogleMap(); cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, INITIAL_MAP_ZOOM_LEVEL); googleMap.moveCamera(cameraUpdate); } 나는 이런 식 LatLng으로 다른 수업에 무엇이 있는지 아는 책임을 제거한다고 생각합니다 …

4
“조기 추상화”란 무엇입니까?
나는 문구가 arround에 던져지는 것을 들었고 나에게 논쟁은 완전히 미친 소리로 들린다. (여기서 내가 밀짚을 치고 있다면 미안하지만 내 의도는 아니다) 일반적인 경우가 무엇인지 알기 전에 추상화를 생성하고 싶지 않습니다. 그렇지 않으면 (1) 속하지 않은 추상화에 포함하거나 (2) 중요한 것을 생략 할 수 있습니다. (1) 나에게 이것은 프로그래머가 실용적이지 않은 …


4
마이크로 서비스 아키텍처가 마이크로 서비스 당 별도의 데이터베이스를 필요로하는 경우 비용이 많이 들고 관리가 불가능합니다. 왜 필요한가요?
마이크로 서비스에 대해 읽었으며 격리를 달성하기 위해 서비스마다 별도의 DB를 만드는 것이 비논리적 인 것 같습니다. 웹 서비스와 단일 데이터베이스 만 사용하여 동일한 결과를 얻을 수 있습니다. 왜 필요한가요? 데이터베이스를 분리하는 것은 논의 할 수없는 것입니다. 아니면 내가 틀렸다? 이것에 대해 안내해 줄 수 있습니까?

1
API 게이트웨이 뒤의 마이크로 서비스가 액세스 토큰을 확인해야합니까?
API Gateway를 통해서만 외부에서 액세스 할 수있는 많은 마이크로 서비스가 있습니다. 내 API 게이트웨이는 OAuth 리소스로 설정되고 요청을 하나 이상의 마이크로 서비스에 다운 스트림으로 전달하기 전에 토큰을 확인합니다 (서명 확인 등). 범위와 클레임을 확인하기 위해 마이크로 서비스에 토큰이 필요하지만이 서비스에서도 토큰의 유효성을 검사해야합니까? 약간 과잉이지만이 시나리오에 대한 온라인 조언을 찾을 …

4
적절한 방법으로 조건부를 다형성으로 대체 하시겠습니까?
프로토콜 (Swift 프로그래밍 언어 측면에서 두 가지 클래스 Dog와 Java / C #의 인터페이스)을 Cat준수하는 클래스 를 모두 고려하십시오 Animal. 우리는 개와 고양이의 혼합 목록을 보여주는 화면이 있습니다. 거기 Interactor클래스는 뒤에서 그 핸들 로직은. 이제 고양이를 삭제하려고 할 때 사용자에게 확인 알림을 표시하려고합니다. 그러나 경고없이 개를 즉시 삭제해야합니다. 조건부가있는 방법은 …

2
Forth의 유연성으로 인해 문법이 적합하지 않은 이유는 무엇입니까?
최근에 스택 기반 프로그래밍 언어를 작성하는 작업을 수행했습니다. 그러나 언어 디자인을 시작하기 전에 기존 스택 기반 언어를 읽고 실험 해 보는 것이 좋습니다. 이것은이 게시물의 주제로 연결됩니다. Postfix 스타일 표현식을 사용하는 스택 기반 언어 인 Forth에 대한 Wikipedia 기사를 읽고있었습니다 . 이 기사에서는 다음과 같은 진술을 보았습니다. Forth의 유연성은 정적 …

2
경보 시스템 아키텍처
다양한 프로그램의 경고 메시지를 처리하고 전자 메일을 통해 소비자에게 바람을 불어 넣을 수있는 시스템을 만들고 싶습니다. 이것은 모두 하나의 내부 네트워크를 통해 포함됩니다. 기본 아키텍처가 다음과 같이 보이기를 원합니다. 내가 현재 가지고있는 주요 관심사는 "메시지 처리기"비트인데, 이는 "API 정렬"입니다. 이 시스템의 모든 구성 요소가 데이터베이스에 대한 모든 쓰기를 처리하는 API로 …

5
민첩한 방법론 : 빠르고 더럽거나 계획을 먼저 세우십니까?
민첩한 질문 : 애자일은 일을 시작하고 "빠르고 더러운 길"을 운영한다고 믿습니까? 아니면 방법론 질문이 아니며 사례별로 평가하는 질문입니까? 나는 이미 많은 구조 자체를 구축 한 후에 기술적으로 시스템의 기초를 "재창조"하고 있습니다. 그것은 엄청난 양의 작업이 아닙니다. 그것을 조정하고 빌드? 나는 이런 식으로 더 나은 방법으로 생각합니다 ... 지저분한 시스템을 세우면 …
10 agile 

4
어디에서나 데이터 검사를 도입 할 수있는 좋은 코드 스타일?
나는 크기가 충분히 커서 프로젝트를 더 이상 머리 속에 담을 수 없습니다. 나는 많은 클래스와 함수를 다루고 있으며 데이터를 전달하고 있습니다. 시간이 지남에 따라 오류가 계속 발생한다는 것을 알았습니다. 데이터를 다른 함수에 전달할 때 데이터의 정확한 형식을 잊어 버렸습니다. 예를 들어 하나의 함수는 문자열 배열, 다른 함수는 나중에 작성하여 사전 …

6
대부분의 클래스를 데이터 필드 전용 클래스와 메소드 전용 클래스 (가능한 경우)로 분리하는 것이 좋거나 반 패턴입니까?
예를 들어, 클래스에는 보통 다음과 같은 클래스 멤버와 메소드가 있습니다. public class Cat{ private String name; private int weight; private Image image; public void printInfo(){ System.out.println("Name:"+this.name+",weight:"+this.weight); } public void draw(){ //some draw code which uses this.image } } 그러나 단일 책임 원칙과 공개 폐쇄 원칙에 대해 읽은 후 정적 메소드 …

6
똑같이 차선책으로 디자인을 반복적으로 피하는 방법은 무엇입니까?
그래서 아마도 많은 사람들처럼, 나는 종종 문제를 직감적으로 맞추고 원하는 이점을 갖는 디자인 패턴 / 접근법이있는 디자인 문제로 두통을 겪고 있습니다. 종종 어떤 종류의 작업없이 패턴 / 접근을 구현하기 어렵게 만드는 몇 가지주의 사항이있어 패턴 / 접근의 이점을 무효화합니다. 거의 모든 패턴 / 접근 방식을 반복하는 것은 매우 쉬운 일이 …

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.