문제

나는 내가 지원하는 애플리케이션에 ORM을 단계적으로 도입하는 아이디어를 고민하고 있습니다.단위 테스트가 없어 앱이 구조화되어 있지 않습니다.따라서 모든 변화는 위험할 것입니다.나는 변화해야 할 충분한 이유가 있다는 점에 분명히 우려하고 있습니다.데이터 액세스를 위한 보일러 플레이트 코드가 줄어들고 생산성이 향상된다는 아이디어입니다.

당신의 경험에 따르면 이것이 사실로 들리나요?
단계적으로 도입하는 것이 가능하거나 좋은 생각일까요?
ORM의 단점은 무엇입니까?

도움이 되었습니까?

해결책

나는 Michael Feather의 책을 한 권 구입하는 것을 강력히 추천합니다. 레거시 코드로 효과적으로 작업하기 ("레거시 코드"에서 깃털은 단위 테스트에서 적절하게 다루지 않는 모든 시스템을 의미합니다).여기에는 모범 사례를 리팩토링하고 단계적으로 적용하는 데 도움이 되는 좋은 아이디어가 가득합니다.

물론, ORM 도입을 단계적으로 진행하여 처음에는 도메인 모델의 일부 하위 집합에 액세스하는 데 ORM을 사용할 수 있습니다.그리고 그렇습니다. 저는 ORM을 사용하면 개발 시간이 단축된다는 사실을 발견했습니다. 이것이 주요 이점 중 하나이며 저는 데이터 액세스 계층을 힘들게 직접 만들던 시절을 확실히 놓치지 않습니다.

ORM의 단점 - 경험상 선택한 ORM 솔루션의 개념, 구성 및 특이성을 파악하는 데 필연적으로 약간의 학습 곡선이 있습니다.

편집하다:저자 이름 수정

다른 팁

실제로 마이클 페더스('밥 삼촌'이 요즘 브랜드 이름인가봐요!)가 쓴 『로버트 C 마틴』 책은 필수입니다.

단위 테스트를 사용하여 개발되지 않은 응용 프로그램에 단위 테스트를 적용하는 것은 시간이 많이 걸리는 것은 물론이고 거의 불가능합니다.코드를 수정할 수 없습니다.

하지만 그건 문제가 되지 않습니다.리팩토링은 기능을 변경하지 않고 디자인을 변경하는 것이므로(여기서 의미가 너무 심하게 손상되지 않았으면 좋겠습니다) 훨씬 더 폭넓은 방식으로 작업할 수 있습니다.

큰 덩어리로 시작하십시오.반복 가능한 실행을 설정하고 후속 실행에 대한 예상 결과로 발생하는 상황을 캡처합니다.이제 앱 또는 최소한 그 일부를 테스트할 수 있습니다.물론 매우 훌륭하거나 포괄적인 테스트는 아니지만 시작에 불과하며 상황은 거기서부터 더 좋아질 수 있습니다.

이제 리팩터링을 시작할 수 있습니다.너무 방해하지 않고 ORM 기능으로 대체할 수 있도록 데이터 액세스 코드 추출을 시작하려고 합니다.자주 테스트하세요:레거시 앱을 사용하면 어떤 문제가 발생하는지 놀라게 될 것입니다.응집력과 결합력이 실제와 같은 경우는 거의 없습니다.

마틴 파울러(Martin Fowler)의 글도 살펴보고 싶습니다. 리팩토링, 이는 분명히 프로세스에 대한 최종 작업입니다.

저는 최근 NHibernate를 사용하기 시작한 대규모 ASP.net 응용 프로그램을 작업하고 있습니다.대신 우리는 SQL Server에서 수동으로 유지하고 있던 많은 도메인 개체를 NHibernate로 옮겼습니다.그것은 일을 꽤 단순화시켰고 시간이 지남에 따라 일을 바꾸는 것을 훨씬 더 쉽게 만들었습니다.우리는 변경 사항을 적용하고 많은 새로운 작업에 적합한 곳에서 NHibernate를 사용하게 되어 기쁩니다.

TypeMock이 레거시 코드를 리팩토링하는 데 자주 사용된다고 들었습니다.

나는 레거시 애플리케이션에 ORM을 도입하는 것이 문제를 야기한다고 진지하게 생각합니다(완전히 다시 작성하는 것과 같은 정도의 문제일 수 있습니다).

그 외에도 ORM은 좋은 방법이므로 반드시 고려해야 합니다.

리팩토링의 규칙은 다음과 같습니다.단위 테스트를 수행합니다.

따라서 먼저 최소한 핵심/주요 사항에 대해 몇 가지 단위 테스트를 배치해야 할 수도 있습니다.

ORM은 상용구 코드를 줄이도록 설계되어야 합니다.시간/문제 vs.기업의 ROI는 추정에 달려 있습니다 :)

모델 계층 백엔드의 "핫 스와핑"을 허용하도록 코드가 이미 아키텍처화되어 있지 않은 한 코드를 어떤 방식으로든 변경하는 것은 항상 매우 위험합니다.

잘못 설계된 코드에 대해 단위 테스트의 안전망을 구축하려고 시도하는 것은 성공을 보장하지 않으며 코드 변경에 대해 더 안전하다고 느끼게 할 뿐입니다.

따라서 관련 위험을 감수할 수 있는 강력한 비즈니스 사례가 없다면 충분히 그대로 두는 것이 가장 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top