2015-02-03 2 views
2

나는 철도 지향 프로그래밍의 원칙 http://fsharpforfunandprofit.com/rop/를 사용하려고 시도하고있어 기준이 http://indiedevspot.azurewebsites.net/2015/01/20/two-track-coding-rop-for-dummies-part-2/SQL 유형 ROP와 공급자 - F 번호

나는 성공적으로 지금 우리는에 항목을 퍼팅에지고 제외하고, 코드베이스의 대부분이 구현 한 SQL을 사용하고 이러한 유형의 유효성 검사에 ROP를 사용하려고합니다. > B - -> C ->는 '-> B'-> C 당신은 그 createSomething을 알 수

let createSomething a b c = {A = a; B = b; C = c} 
let createValidSomething so = 
    createSomething 
    <!> validateFunction1 so.param1 
    <*> validateFunction2 so.param2 
    <*> ...so forth and so on 

레코드 유형의 인스턴스 a를 반환하는 함수입니다 : 전형적인 패턴은

그림 1 ' SQL 형식 공급자는 변경 가능한 형식을 반환합니다 (레코드가 아님). 이 시점에서

let createSQS(a, b, c, d, e, f, g) = 
    let sqs = context.``[dbo].[Something]``.Create(a, b, c, d, e, f, g) 
    sqs 

, 우리가 이미 우리가 A-> B-> C-> D-작동하지 않습니다 알고

그림 2와 유사한 createSomething 기능을 구축 할 내 시도 살펴 봅시다 > e-> f-> g-> 문맥. [dbo].[Something]. 엔티티

중간 레코드 유형을 가질 수 있고 ROP 보안 주체를 따르고 성공/실패와 일치하고 이미 유효성이 검증 된 개체를 만들 수 있음을 알고 있습니다. 하지만 그렇게 많은 단계가없는 것 같습니까?

아무에게도 좋은 패턴을 알고 있습니까? 이상적으로 Type Provider와 호환되는 Record Type을 생성하는 Figure1과 유사한 기능을 가질 수 있습니다.

나는 일을 시도하고 Skype에서 놀고 있습니다. :).

+0

어떤 SQL 형식 공급자입니까? 다른 방법을 제공하여 구현할 수 있습니까? – forki23

+0

FSharp.Data.SQL.SQLDataProvider –

+0

잘 모르겠습니다. 동일한 방식으로 형식 구성을 노출하는 다른 메서드를 제공 할 수 있습니다. 예? –

답변

1

의 필요한 서명을 할 것이다 그래서 우리는 우리의 dev에 회의에서 해답을했다, 그리고 결정 우리는 그 실제로 각 부분을 자체 기능으로 실행하고 싶습니다. 내부 구속을 위해 우리는 우리 자신의 연산자를 발명했습니다. 플러스 (& & &) (내 사이트 www.indiedevspot.com에 관해 블로그에 올립니다)와 유사하며 최상위 레벨에서 정상 바인딩으로 실행되었습니다.

우리의 최고 수준의 코드는 다음과 같습니다

[<HttpPost>] 
x.member Add(sa:Something) = 
      sa|>ValidateSomething 
      >>= converttoSSA 
      >>= persistSSA 

우리 의한 검증, 변환 및 지속성의 독립적 인 시험 가능성에 우려를 분리하기로 결정했다. 이 이론은 작동하도록 보장되는 기능들로 구성된 경우 기능적 구성 자체가 본질적으로 작동하도록 보장된다는 것입니다 (또는 훨씬 더 나은 기회를 가짐).

우리가 아직 해결하지 못한 제안 된 방법으로 갔다면 창조, 검증 및 변환에 대한 우려가 섞여있을 것입니다. 이는 결국 불필요한 추가 레코드 유형을 생성하게됩니다.

1

는 함수 createSQS 더 이런 일 안 :

let createSQS a b c d e f g = 
    context.``[dbo].[Something]``.Create(a, b, c, d, e, f, g) 

이 하나가 a->b->c->d->e->f->g->context.[dbo].[Something].Entity

+0

아, 함수의 두 가지 맛은 실제로 똑같은 것을 반환합니다.나는 계속 나아가서 내 취향에서 추가 코드를 제거했다. –

+0

우리가 찾고있는 서명은 : a -> b -> c -> a '-> b'-> c ' –

+0

예제에서 createSomething의 정확한 서명은 무엇입니까? 맞다면 a-> b-> c-> Foo입니다. 여기서 Foo = {A : a; B : b; C : c}. –