2009-09-07 3 views
1

먼저 "내 기술이 너의 것보다 낫다"라는 유형의 게시물을 찾고 싶지 않다. 이것은 실제 사례 시나리오이며이 결정에 직면 해 있습니다. 이를 염두에두고 설명 드리겠습니다.WebForms/MVC를 Windows Forms 프로그래머

WinForms 응용 프로그램이 있습니다. 초기 .NET 1.0에서 시작되었지만 첫 번째 배송 버전은 .NET 1.1을 사용했습니다. 거기에 레이어 (예 : BusinessLayer.dll, Datalayer.dll, Framework.DLL 등)이지만이 응용 프로그램의 "긴"개발주기 중 어느 시점에서는 "프리젠 테이션"계층 (Win Forms)이 일부 따라서 코드와 코드 뒤의 표현 사이의 분리는 일종의 신화입니다. 나쁜 습관이나 무엇이든, 진실은 응용 프로그램이 있고 작동한다는 것입니다.

몇 년이 지났고 .NET 2.0을 사용하여 천천히 마이그레이션했으며 거의 ​​효과가있었습니다. 여기 저기에서 몇 가지 호출을 변경해야했습니다. 마지막 버전은 .NET 3.5sp1에서도 마찬가지였습니다. 우리는 일종의 Webservices 일이 필요했고 대신 WCF를 사용하기로 결정했습니다. 그것은 잘 작동합니다. 그러나 이러한 모든 .NET 업그레이드에도 불구하고 응용 프로그램의 코드베이스는 대부분 5 년 전의 동일한 로큰롤과 동일합니다. 우리는 데이터 객체에 대해 Gentle.NET (이전 및 유지 관리되지 않음)을 사용합니다 (5 년 전의 축복이었습니다!).

우리의 프리젠 테이션 레이어 winforms는 완전히 gdi + 사용자 정의 컨트롤의 90 %를 사용하기 때문에 "보기 좋게"표시됩니다. (가능할 때마다 WinAPI를 해킹 할 필요없이). 응용 프로그램은 터치 기반입니다 (즉, 잉크를 사용하지만 잉크를 사용하지는 않습니다). 그러나 단추, 레이블 등은 모두 촉각 도구와 함께 사용하도록 "설계되었습니다". (TabletPC 또는 터치 스크린). 물론 일부 사용자는 키보드/마우스를 사용합니다.

이 모든 것을 염두에두고 모든 web2.0 및 인터넷 퍼즈 (Jeff의 게시물을 포함))를 사용하여 응용 프로그램을 다시 작성하고 웹 기술을 사용할 가능성을 고려하고 있습니다. 아이디어는 분명히 고객에게 더 많은 가용성을 제공합니다 (시스템을 언제 어디서나 사용할 수 있음). 유지 관리가 적습니다 (업그레이드 할 수 있고 즉시 업그레이드 할 수 있습니다). 인터넷 대 WinApp 문제.

문제는 이것이 의료 산업이라는 점을 감안할 때 모든 고객이 데이터베이스를 서버로 "이동"할 수있는 것은 아니며 수용 가능하며 웹 서버/데이터베이스 설치를 강요합니다. 서버를 자체 서버에 가지고 있으므로 자신의 복사본이 있습니다. 큰 문제는 아니지만 (수동으로 업데이트해야한다는 점을 제외하면 5 년 동안 win32 응용 프로그램을 업데이트 했으므로 문제는 아닙니다!).

이제 기본 '질문'으로 돌아갑니다.

이 팀은 Asp.NET 경험이 거의 없으므로 ASP 2.0 (1999/2000)에서 많은 프로그램을 만들었지 만 HTML + VBScript + CSS의 스파게티 였기 때문에 생각하지 않습니다. 모든 경험 (인터넷 버블!) 후에 우리는 VB6, C# .NET 1x로 돌아 갔고 나머지 이야기를 알고 있습니다. 우리는 WinForms 용 C# 개발자 중 소규모 팀입니다. 우리는 지난 .NET 3.5를 타고 Linq To SQL Experience를 얻었습니다. 우리는 매우 자연스럽고 "5 년전에 그렇게했으면 좋겠다"고 느꼈습니다.

이 모든 것을 감안할 때 응용 프로그램을 다시 작성하는 것은 "간단한 작업"이 아닙니다 (이미 알려진 C# .NET에서 수행하고 싶지는 않습니다). 시간과 계획을 수립 할 수는 있지만 수십 개의 실수를 수정할 수 있습니다 애플리케이션으로 5 년간의 경험을 쌓은 지금 우리는 현재 고객이 소프트웨어를 어떻게 사용하고 싶은지, 현재의 앱을 디자인 할 때 우리가 만든 제한 사항을 더 잘 이해하고 있다고 말할 수 있습니다. 응용 프로그램의 "지식"과 비즈니스의 작동 방식은 모두 디자인과 코드 및 유용성면에서 훨씬 뛰어난 응용 프로그램을 만들기 위해 적용될 수 있습니다. .NET 1.1에서 우리는 제네릭조차 가지고 있지 않았다는 것을 기억하십시오!;) (많은 ArrayList가 여기에 있습니다.)

추가 메모로 Crystal Reports를 사용합니다 (평소와 같이). 우리는 잉크 컨트롤이 반드시 필요하다고 생각하지 않습니다. 우리는 HTML이 WinForms가 아니기 때문에 HTML/CSS가 우리가 원하는 방식으로 보이도록 만들 수 있습니다. 따라서 일부는 재현 할 수 없습니다.

MVC (또는 WebForms)에서 이것을 계획하는 것이 너무 미친 것이라고 생각하십니까? MVC (레일즈상의 루비와 같은) 아이디어 (책의 기본 이상으로 루비 프로그래밍을 한 적이 없다)가 좋기 때문에 우리 팀의 아무도 전문가가 아니지만 언제나 배우고 읽을 수 있습니다. 그것은 "로켓 과학"이되어서는 안됩니다.

이 질문 전체가 다소 주관적 일 수 있지만, 노후화 된 Winforms 응용 프로그램을 새로운 ASP/MVC/XXX 웹 응용 프로그램으로 대체 하시겠습니까? 경험이 있거나 시도 했습니까 (성공했거나 실패 했습니까)?

더 나은 결정을 내리는 데 도움이되는 모든 통찰력이 인정 될 것입니다.

미리 감사드립니다.

업데이트 : 응답 한 모든 사람들 덕분에 우리는 이것이 좋은 움직임인지 아닌지 평가할 것입니다. 분명히 일이지만, 데스크톱 응용 프로그램이 점점 오래 가고 있습니다. (오래된 네트워크를 사용하고 있습니다. 1.1 해킹) 그리고 그것은 Vista와 W7에서 문제없이 다소 효과가 있었고, 미래의 업데이트가 그것을 깨뜨릴 수도 있습니다. 또한 응용 프로그램의 "더 많거나 적은 코어"부분이 심하게 설계된 아이디어를 노출하고 있으며 특정 작업을 수행하기 위해 여기저기서 해킹해야했습니다. 경험이 없으므로 비즈니스가 어떻게 작동했는지에 대한 100 % 지식이 부족합니다 (고객이 원하는 것을 확신하지 못함). 새로운 응용 프로그램 (어떤 형태로든)은 우리가 모든 사용자 지식을 유지하면서 더 나은 기반을 만들 수있게 해줍니다. 하지만, 그것은 일과 중입니다. :) 그래서 우리는이 모든 옵션을 여기에서 고려할 것입니다. 여러분 중 일부는 언급했듯이 더 얇은 클라이언트와 여기에 WCF를 사용하는 것이 더 적절할 수도 있습니다.

다시 한번 감사드립니다!

답변

3

웹 응용 프로그램을 다시 만들 때 데스크톱 응용 프로그램 코드를 다시 사용하려는 모든 노력을 포기하는 것이 가장 좋습니다. 다음은 그 이유입니다.

  1. 웹 응용 프로그램 특히 asp.net은 다른 모델을 사용합니다. 스타터는 http에 상태가 없음을 유의하십시오. 브라우저가 서버와 대화 할 때마다 현재 페이지의 모든 컨트롤에 대한 현재 내용을 명시 적으로 보내야합니다. Windows 응용 프로그램에서 그런 모델을 사용하지 않았을 것입니다.

  2. viewstate 크기를 최적화하고 http 요청을 자주 수행하려는 네트워크의 부하를 줄입니다. 다시 기존 창 응용 프로그램에는 그러한 조항이 없습니다.

  3. 업데이트보기. 다른 시나리오의 GUI를 업데이트하기 위해 Windows 응용 프로그램에 다른 이벤트 처리기, 스레드 및 내용이 없을 수 있습니다. 그것들 모두를 교체해야합니다. Javascript는 완전히 다른 동물입니다.

  4. 보안. 브라우저를 사용할 때 로컬 디스크에 대한 액세스는 매우 제한적이지만 Windows 응용 프로그램에서 당연한 것으로 간주됩니다. Windows 응용 프로그램에 로컬 리소스가 필요한 코드가 있으면 문제가 발생할 수 있습니다.

내가 다음 사항을 권장합니다 : 현재 응용 프로그램이 로컬 디스크 액세스 요구 사항이있는 경우

  • 이 확인 (예를 들어, 등 로컬 파일에 읽기/쓰기).
  • 다른 http 모듈이나 처리기를 작성할 때 기존 Windows 응용 프로그램의 백엔드/비즈니스 로직 부분을 활용할 수 있습니다.
  • 응용 프로그램의 어느 부분이 웹 서비스가 될 수 있는지 생각해보십시오.
+0

+1은 무국적입니다. – jao

+0

이것은 첫 번째 답변이며 훌륭한 정보를 제공하기 때문에 받아들이 겠지만 나머지는 모두 감사하겠습니다. 슬프게도 StackOverflow는 정수에 대해서만 처리합니다. 두 가지 좋은 답변을 드릴 수는 없습니다 : S –

2

응용 프로그램을 정리하기 위해 많은 리팩토링이 필요합니다. 웹 모델로 이동하고 최대 재사용을 원할 경우 실제로 그렇게해야합니다. 웹 모델로 이동하기 전에 해당 모델에서 사용자 인터페이스를 복제 할 수 있는지 이해해야한다고 생각합니다. 고객 관점에서 볼 때 독창적 인 판매 포인트입니까? 이런 결정을 순수한 기술적 결정보다는 사용자 중심으로 수행하기를 원합니다.

애플리케이션이 가장 낮은 공통 분모 웹 모델이 아닌 씩 (thick) 클라이언트 애플리케이션에 가장 적합한 후보라고 생각됩니다. 고려해야 할

어떤 것들은 :

  • 어떻게 할 웹 인터페이스에 미치는 영향 태블릿 상호 작용?
  • 어떤 새로운 고객이 웹 버전을 갖게 되나요?
  • 기존 고객이 귀하의 제품을 포기할 예정입니까?
  • 웹 기술에서 당신을 멘토링하는 데 적합한 기술을 갖춘 컨설턴트 또는 외부 리소스에 액세스 할 수 있습니까? 그렇지 않으면 StackOverflow 또는 다른 웹 리소스를 사용하여 도움을받을 수 있습니다. 당신은 좋은 멘토링과지도가 필요합니다.
  • 이 작업을 시작하면 예상보다 오래 걸립니다. 당신은 애플 리케이션을 알고 있지만 당신이 웹을 알고있는 것처럼 들리지는 않습니다. 과거의 경험에 따르면 이처럼 대규모 재 작성이 재앙으로 끝날 수 있음을 알 수 있습니다 (처음에는 그다지 어렵지 않습니다)
  • 웹 기반 버전에 새로운 기능을 쓸 수 있습니까?
  • ClickOnce 배포로 이동하여 응용 프로그램을 고객에게보다 쉽게 ​​배포 할 수 있습니까? 웹의 장점 중 하나는 배포가 더 쉽다는 것입니다. 그걸 좀 가깝게 할 수 있니?
  • WPF로 마이그레이션하고이를 사용하여 브라우저 응용 프로그램을 만드는 것이 더 쉬울까요?
  • Silverlight 또는 Flex는 풍부한 경험을 만드는 데 더 좋은 옵션 일 수 있으며 WinForms 개발자가 더 쉽게 접근 할 수 있습니다. 이게 가능한가?
+0

큰 포인트 Brian이 고려할 것입니다. 감사. –

0

앱과 비슷합니다. 데스크톱 앱으로 가장 잘 작동하는 앱 중 하나입니다. 사용자가 귀하의 앱에 액세스 할 수 있기를 원합니다. 브라우저를 사용하여.

가능한 한 많이 리팩토링하여 GUI가 더욱 깨끗해지고 "코드"가 없도록 제안합니다. 이 작업을 완료하면 asp.net mvc 응용 프로그램을 개발하기 시작하고 데스크톱 응용 프로그램을 유지하십시오. UI 레이어를 제외한 모든 레이어를 사용하여 더 쉽고 빠르게 만들 수 있어야합니다. mvc가 존재하기 때문에 webforms는 비 웹 개발자가 웹을 사용하도록하는 것에 대한 것입니다. 하지만 당신은 웹을 잘 알고 있습니다. 그래서 당신은 mvc가 갈 길이 멀기 때문에 컨트롤을 원합니다.